📄 serio.lst
字号:
C51 COMPILER V8.02 SERIO 10/31/2008 10:53:39 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE SERIO
OBJECT MODULE PLACED IN serio.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE serio.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //串口子程序
2 /*******************************************************************/
3 #include <reg52.h>
4 #include "serio.h"
5 #include "ds1302.h"
6 uchar count=0;
7 struct time clock1;
8 struct time *tm1;
9 /*******************************************************************/
10 //initial uart 串口初始化
11 void UART0_Init()
12 {
13 1 SCON = 0x50; //串行方1(波特率可变10位异步通信方式),串行接收允许
14 1 //SCON: serail mode 1, 8-bit UART, REN=1,Buard=(2^SMOD)(Timer1 溢出率 )/32
15 1 TMOD |= 0x20; //TMOD:timer1 mode 2,8 位reload //定时器1,模式2,8位自动装入计数初值方式,高8位为初值,只
-由低8位计数
16 1 PCON |= 0x80; //SMOD=1; //波特率增加一倍
17 1 TH1 = 0xFd; //fosc=11.0592MHz,smod=0, Baud:4.8k--TH:F4,9.6K--TH:FD;
18 1 TL1 = 0xFd; //fosc=11.0592MHz,smod=1, Baud:19.2K--TH:FD; 由公式可求得其为波特率为19200
19 1 IE |= 0x90; //ea=1,es=1,Enable Serial Interrupt 开启串行口中断
20 1 TR1 = 1; // timer 1 run 启动T1
21 1 }
22 /*******************************************************************/
23
24 //send one byte to pc发送一字节到PC
25 void UART0_SendByte(uchar da)
26 {
27 1 EA = 0; //关闭中断
28 1 SBUF = da; //数据缓冲寄存器的数据为DA
29 1 while(TI==0); //如果发送中断无,则进入死循环
30 1 TI=0; //如果发送中断有,则装发送中断置为0(无)
31 1 EA = 1; //开启总中断
32 1 }
33
34 /******************************************************************/
35
36 //send one string to pc发送一串字符到PC
37 void UART0_SendStr(uchar *str)
38 {
39 1 uchar i;
40 1 i=0;
41 1 while((*(str+i))!='\0') //如果字符串内容不为0,则往下执行
42 1 {
43 2 UART0_SendByte(*(str+i));
44 2 i=i+1;
45 2 }
46 1 }
47 //******************************************************************//
48
49 void receive(void) interrupt 4
50 {
51 1 uchar temp;
52 1 EA=0;
53 1 if(RI)
54 1 {
C51 COMPILER V8.02 SERIO 10/31/2008 10:53:39 PAGE 2
55 2 temp=SBUF;
56 2 switch(count)
57 2 {
58 3 case 0:if(temp==0x30)count=1;else count=0;break;
59 3
60 3 case 1:if(temp==0x30)count=2;else count=0;break;
61 3
62 3 case 2:if(temp==0x30)count=3;else count=0;break;
63 3
64 3 case 3:clock1.year=(temp&0x0f)<<4;count=4;break;
65 3
66 3 case 4:clock1.year=(temp&0x0f)+clock1.year;count=5;break;
67 3
68 3 case 5:clock1.month=(temp&0x0f)<<4;count=6;break;
69 3
70 3 case 6:clock1.month=(temp&0x0f)+clock1.month;count=7;break;
71 3
72 3 case 7:clock1.date=(temp&0x0f)<<4;count=8;break;
73 3
74 3 case 8:clock1.date=(temp&0x0f)+clock1.date;count=9;break;
75 3
76 3 case 9:clock1.hour=(temp&0x0f)<<4;count=10;break;
77 3
78 3 case 10:clock1.hour=(temp&0x0f)+clock1.hour;count=11;break;
79 3
80 3 case 11:clock1.minute=(temp&0x0f)<<4;count=12;break;
81 3
82 3 case 12:clock1.minute=(temp&0x0f)+clock1.minute;count=13;break;
83 3
84 3 case 13:clock1.sec=(temp&0x0f)<<4;count=14;break;
85 3
86 3 case 14:clock1.sec=(temp&0x0f)+clock1.sec;count=15;break;
87 3
88 3 case 15:clock1.week=(temp&0x0f);tm1=&clock1;SetTime(tm1);count=0;break;
89 3 }
90 2 RI=0;
91 2 }
92 1 else
93 1 TI=0;
94 1 EA=1;
95 1 }
96 /*******************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 416 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -