标签:中断 定时器 char ima main abd div one 语句
串口流水灯
发送HEX 01 可以控制第一盏灯点亮,再次发送可以控制熄灭
#include<reg52.h> #define uchar unsigned char #define uint unsigned int uchar i; sbit D0=P1^0; sbit D1=P1^1; sbit D2=P1^2; sbit D3=P1^3; sbit D4=P1^4; sbit D5=P1^5; sbit D6=P1^6; sbit D7=P1^7; //波特率 19200 void init_uart(void) { TMOD=0X20; TH1=0XFD;//19200 TL1=0XFD; TR1=1; SCON=0X50; EA=1; ES=1; } void main (void) { init_uart(); while(1) { while(!RI); RI=0; i=SBUF; switch(i) { case 0x01 :D0=~D0;break; case 0x02 :D1=~D1;break; case 0x03 :D2=~D2;break; case 0x04 :D3=~D3;break; case 0x05 :D4=~D4;break; case 0x06 :D5=~D5;break; case 0x07 :D6=~D6;break; case 0x08 :D7=~D7;break; } } }
发送接收
#include<reg52.h> #define uchar unsigned char uchar a,flag; void main() { TMOD=0x20;//设置定时器1为模式2 TH1=0xfd;//装初值设定波特率19200 TL1=0xfd; TR1=1;//启动定时器 SM0=0;//串口通信模式设置 SM1=1; REN=1;//串口允许接收数据 EA=1;//开总中断 ES=1;//开串中断 PCON=0x80; while(1) { if(flag==1)//如果有数据则进入这个语句 { ES=0;//进入发送数据时先关闭串行中断 flag=0; SBUF=a;//将数据原样发回 while(!TI);//等待数据发完 TI=0; ES=1;//退出再开串行中断 } } } void serial() interrupt 4//串行中断函数 { P1=SBUF;//将数据发送给P1口显示(测试用) a=SBUF;//收取数据 flag=1;//标志置位 RI=0; }
标签:中断 定时器 char ima main abd div one 语句
原文地址:https://www.cnblogs.com/bymeet/p/14355283.html