📄 01-串口测试程式(接收).lst
字号:
C51 COMPILER V6.12 01_確_诓___砡________ 10/01/2009 12:12:47 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 01_確_诓___砡________
OBJECT MODULE PLACED IN .\01-串口测试程式(接收).OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\01-串口测试程式(接收).c DEBUG OBJECTEXTEND
stmt level source
1 // 01-串口测试程式(接收).c
2 // 接收来至串口的数据,对应每一个ASCII码,然后显示相对应的数字
3 // 29-09-09 akuei2
4
5 #include "stdio.h"
6 #include "reg52.h"
7 #define uchar unsigned char
8
9 //定义数码管码
10 uchar code Led_Code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
11
12 //定义位选码
13 //0b111011111,0b11011111,0b10111111,0b01111111
14 uchar code Led_Select[]={0xEF,0xDF,0xBF,0x7F};
15
16 uchar Buffer_RXD,Number,N,Temp;
17
18 //50微秒延迟函数
19 void Delay_50us(int t)
20 {
21 1 uchar j;
22 1 t--;
23 1 for(;t>0;t--)
24 1 for(j=19;j>0;j--);
25 1 }
26
27 //数码管显示函数
28 void Display(void)
29 {
30 1 P0=Led_Code[Number]; // 送数码管码
31 1 P2=Led_Select[3]; // 送位选码
32 1 Delay_50us(20); // 延迟1微秒
33 1 P0=P2=0xff; // 消影
34 1 }
35
36 //接收数据对应数字函数
37 void Edit_Number(void)
38 {
39 1 if(Temp!=Buffer_RXD) // 如果接受的数据与前一个数据不一样...
40 1 {
41 2 switch(Buffer_RXD)
42 2 {
43 3 case '0': Number=0; break;
44 3 case '1': Number=1; break;
45 3 case '2': Number=2; break;
46 3 case '3': Number=3; break;
47 3 case '4': Number=4; break;
48 3 case '5': Number=5; break;
49 3 case '6': Number=6; break;
50 3 case '7': Number=7; break;
51 3 case '8': Number=8; break;
52 3 case '9': Number=9; break;
53 3 }
54 2 }
55 1 }
C51 COMPILER V6.12 01_確_诓___砡________ 10/01/2009 12:12:47 PAGE 2
56
57 //初始化函数
58 void Init(void)
59 {
60 1 TMOD=0x20; // T1工作模式2,T0工作模式1
61 1 SM0=0;SM1=1; // 设置串口的工作模式
62 1 TH1=0xfd; // 给TH1赋值,决定赋给TL1的值
63 1 TL1=0xfd; // 给TL1赋值决定波特率9600kb/s
64 1
65 1 TR0=1; // 定时器0启动
66 1 ET0=1;
67 1 TR1=1; // 定时器1启动
68 1
69 1 IT0 = 1; // 外部中断0负边沿触发
70 1 EX0 = 1; // 打开外部中断0
71 1
72 1 REN=1; // 不应许串口接收数据
73 1 EA=1; // 开启中断
74 1 ES=1; // 串口中断应许
75 1
76 1 Number=0;
77 1 Buffer_RXD=0;
78 1
79 1 }
80
81 //主函数
82 void main(void)
83 {
84 1 Init(); // 调用初始化函数
85 1 while(1)
86 1 {
87 2 Display(); // 数码管不停的显示
88 2 }
89 1 }
90
91 //串口接收中断
92 void Ir_RXD(void) interrupt 4
93 {
94 1 ES = 0; // 关闭串口
95 1 if(RI==1)
96 1 {
97 2 RI = 0;
98 2 Buffer_RXD = SBUF;
99 2 Temp=Buffer_RXD;
100 2
101 2 }
102 1 ES = 1; // 打开串口
103 1 Edit_Number(); // 调用函数
104 1
105 1 }
106
107
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 234 ----
CONSTANT SIZE = 15 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
C51 COMPILER V6.12 01_確_诓___砡________ 10/01/2009 12:12:47 PAGE 3
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -