現在串口發送一個1 流水燈時間按道理應該是1s 一個啊,實際很快,奇怪了,頭大了
單片機源程序如下:
- #include <reg52.h>
- void config_uart(unsigned int baud);
- void config_time0(unsigned char ms);
- void ledscan();
- unsigned char code ledchar[] = { 0xfc,0xc,0xda,0xf2,0x66,0xb6,0xbe,0xe0,
- 0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e };
- unsigned char ledbuf[] = {0x00,0x00};
- unsigned char rxd = 0;
- unsigned char th0 = 0;
- unsigned char tl0 = 0;
- unsigned char flag = 0;
- int main()
- {
- unsigned char tmp = 0x01;
- EA = 1;
- config_time0(1);
- config_uart(9600);
-
- P0 = 0x00;
- while(1)
- {
- if( flag )
- {
- P0 = rxd;
- flag = 0;
- rxd <<= 1;
- if(rxd == 0x80)
- {
- rxd = 0x01;
- }
- }
-
- }
- return 0;
- }
- void config_time0(unsigned char ms)
- {
- TL0 = 0x66;
- TH0 = 0xFC;
- TMOD &= 0xf0;
- TMOD |= 0x01;
- ET0 = 1;
- TR0 = 1;
- }
- void config_uart(unsigned int baud)
- {
- SCON = 0x50;
- TMOD &= 0xf0;
- TMOD |= 0x20;
- TH1 = 256 - (11059200/12/32)/baud;
- TL1 = TH1;
- ES = 1;
- ET1 = 0;
- TR1 = 1;
- }
- void interrupt0() interrupt 1
- {
- static unsigned long tmp = 0;
- TL0 = 0x66;
- TH0 = 0xFC;
-
- tmp++;
- if(tmp >= 1000)
- {
- flag = 1;
- tmp = 0;
-
- }
- }
- void uart() interrupt 4
- {
- if(RI)
- {
- RI = 0;
- rxd = SBUF;
- SBUF = rxd;
- }
- if(TI)
- {
- TI = 0;
- }
- }
復制代碼
|