仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png (10.66 KB, 下載次數(shù): 25)
下載附件
2021-10-23 22:33 上傳
單片機(jī)串口接受源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- uchar temp,flag;
- uchar a[10];
- uchar count=0;
- void main()
- {
- TMOD=0x20; //定時(shí)器T1工作于方式2
- SCON=0x40; //SCON=0100 0000B,串口工作方式1
- PCON=0x00; //PCON=0000 0000B,波特率9600
- TH1=0xfd; //根據(jù)規(guī)定給定時(shí)器T1賦初值
- TL1=0xfd; //根據(jù)規(guī)定給定時(shí)器T1賦初值
- TR1=1; //啟動(dòng)定時(shí)器T1
- REN=1; //允許接收
- EA=1; //開起總中斷開關(guān)
- ES=1; //需要用到串行口的中斷所以ES=1就是把串行口的中斷打開了
- while(1) //進(jìn)入循環(huán)
- {
- if(flag==1) //等待中斷的來臨,然后flag就會(huì)被賦值為1
- {
- if(a[7]==0x31) //如果發(fā)送的數(shù)據(jù)最后一位為1的話(“15000101”最后一位1
- P1=0xFE; //對(duì)應(yīng)的就是十六進(jìn)制的0x31) 0xfe對(duì)應(yīng)1111 1110 就第
- //一盞燈亮
- else if(a[7]==0x32) //以此類推
- P1=0xFD;
- else if(a[7]==0x33) //以此類推
- P1=0xFC;
- else
- P1=0x00; //發(fā)送為其他數(shù)據(jù)時(shí)燈全亮
- flag=0;
- }
-
- }
- }
-
-
- void serial() interrupt 4 //設(shè)置中斷函數(shù)
- {
- temp=SBUF; //當(dāng)有中斷時(shí)把傳過來的數(shù)據(jù)暫存到temp中
- RI=0; //把設(shè)置中斷的標(biāo)志初始化,等待下一中斷
- if(temp==0x00) //當(dāng)?shù)竭_(dá)最后一位
- {
- a[count]=temp;
- count=0; //計(jì)數(shù)器初始化為下一次中斷準(zhǔn)備
- flag=1; //標(biāo)志置1進(jìn)入主函數(shù),進(jìn)行端口的賦值
- }
- else
- {
- a[count]=temp;
- count=count+1;
- }
- }
復(fù)制代碼
Proteus7.5版本的dsn文件與發(fā)送程序下載:
51單片機(jī)_串口收發(fā).zip
(67.37 KB, 下載次數(shù): 55)
2021-10-23 22:07 上傳
點(diǎn)擊文件名下載附件
51單片機(jī)_串口收發(fā) 下載積分: 黑幣 -5
|