赞
踩
通过串口调试助手发送数字1~8,板子上面的对应指示灯亮。注意此处发送应选择文本模式发送。
- #include <STC15F2K60S2.H>
-
- #define BUAD 9600 //所需波特率、
- #define SYSTEMCLOCK 11059200L //系统时钟频率,L表示该数据为长整型
- void uart_sendstring(unsigned char *str);
- unsigned char flag; //数据接收标志位
- char rin='1';
-
- void UartInit(void) //9600bps@11.0592MHz
- {
- SCON = 0x50; //8位数据,可变波特率
- AUXR |= 0x40; //定时器1时钟为Fosc,即1T
- TMOD = 0x00; //设定定时器1为16位自动重装方式
- TL1 = 65535-(SYSTEMCLOCK/4/BUAD); //设定定时初值与终值,固定模板
- TH1 = (65535-(SYSTEMCLOCK/4/BUAD)>>8);
- TR1 = 1; //启动定时器1
- ES=1;
- EA=1;
- }
-
- void main()
- {
- UartInit();
- while(1)
- {
- if(flag)
- {
- flag=0;
- switch(rin)
- {
- case '1':
- {
- P2=(P2&0x1f)|0x80;
- P0=0xfe;
- P2&=0x1f;
- uart_sendstring('1');
- }
- break;
- case '2':
- {
- P2=(P2&0x1f)|0x80;
- P0=0xfd;
- P2&=0x1f;
- uart_sendstring('2');
- }
- break;
- case '3':
- {
- P2=(P2&0x1f)|0x80;
- P0=0xfb;
- P2&=0x1f;
- uart_sendstring('3');
- }
- break;
- case '4':
- {
- P2=(P2&0x1f)|0x80;
- P0=0xf7;
- P2&=0x1f;
- uart_sendstring('4');
- }
- break;
- case '5':
- {
- P2=(P2&0x1f)|0x80;
- P0=0xef;
- P2&=0x1f;
- uart_sendstring('5');
- }
- break;
- case '6':
- {
- P2=(P2&0x1f)|0x80;
- P0=0xdf;
- P2&=0x1f;
- uart_sendstring('6');
- }
- break;
- case '7':
- {
- P2=(P2&0x1f)|0x80;
- P0=0xbf;
- P2&=0x1f;
- uart_sendstring('7');
- }
- break;
- case '8':
- {
- P2=(P2&0x1f)|0x80;
- P0=0x7f;
- P2&=0x1f;
- uart_sendstring('8');
- }
- break;
- default:
- uart_sendstring("error\r\n"); //输入其他数据返回error
- break;
- }
- ES=1;
- }
- }
- }
-
- //串口中断服务函数
- void uart_Proc() interrupt 4
- {
- if(RI) //正在接收数据
- {
- RI=0; //需要手动赋0
- rin=SBUF; //定时持续接收数据
- ES=0;
- flag=1;
- }
- }
-
- //通过串口发送信息
- void uart_sendstring(unsigned char *str)
- {
- unsigned char *p;
- p=str;
- while(*p!='\0')
- {
- SBUF=*p; //send
- while(TI==0) //等待发送标志位
- TI=0;
- p++;
- }
- }
EA为总开关,ES为串行口中断开关 ,在使用串行口中断前必须闭合EA、ES,即EA=1;
ES=1;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。