📄 ddd.lst
字号:
C51 COMPILER V8.02 DDD 04/16/2009 01:17:07 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE DDD
OBJECT MODULE PLACED IN ddd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ddd.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 //串口发送单片机通信程序
3 //发送格式为:a 1 2 3 4 5 6 7 8
4 //程序功能:带起始位识别的RS232与单片机通信程序
5 #include <reg51.h>
6 #define COUNT 10 // 定义接收缓冲区大小
7 #define duanma P0
8
9 unsigned char buffer[COUNT]; //定义接收缓冲区
10 unsigned char point; //定义接收数据个数指示变量
11 void UART_init(); //串口初始化函数
12 void COM_send(void); //串口接收函数
13 unsigned char CLU_checkdata(void);//计算校验位函数
14 void dis();
15 void DIS_change();
16
17
18 sbit aa=P2^0;
19 sbit bb=P2^1;
20 sbit cc=P2^2;
21 sbit dd=P2^3;
22 sbit ee=P2^4;
23 sbit ff=P2^5;
24 sbit gg=P2^6;
25 sbit hh=P2^7;
26
27 unsigned char DIS_one=0,DIS_two=0,DIS_thr=0,DIS_for=0,DIS_fiv=0,DIS_six=0,DIS_sev=0,DIS_eig=0;
28
29 unsigned char data disp_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
30 0x99,0x92,0x82,0xf8,0x80,0x90,0xff};// 4, 5, 6, 7, 8, 9, off
31 //--------------------------------------------------------------------------------------------------
32 // 函数名称: 延时函数
33 // 函数功能: 动态显示延时
34 //--------------------------------------------------------------------------------------------------
35 void delayms(unsigned int f)
36 {
37 1 unsigned int i,j;
38 1 for(i=0;i<f;i++)
39 1 for(j=0;j<12;j++);
40 1 }
41 //--------------------------------------------------------------------------------------------------
42 // 函数名称: UART_init()串口初始化函数
43 // 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
44 // 串口接收中断允许,发送中断禁止
45 //--------------------------------------------------------------------------------------------------
46 void UART_init()
47 {
48 1 //初始化串行口和波特率发生器
49 1 SCON =0x50; //选择串口工作方式,打开接收允许
50 1 TMOD =0x20; //定时器1工作在方式2,定时器0工作在方式1
51 1 TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)
52 1 TR1 =1; //启动定时器T1
53 1 ET1 =1;
54 1 ES=1; //允许串行口中断
55 1 PS=1; //设计串行口中断优先级
C51 COMPILER V8.02 DDD 04/16/2009 01:17:07 PAGE 2
56 1 EA =1; //单片机中断允许
57 1 }
58 //--------------------------------------------------------------------------------------------------
59 // 函数名称: com_interrup()串口接收中断处理函数
60 // 函数功能: 接收包括起始位’S’在内的十位数据到数据缓冲区
61 //--------------------------------------------------------------------------------------------------
62 com_interrupt(void) interrupt 4 using 3
63 {
64 1 unsigned char RECEIVR_buffer;
65 1 if(RI) //处理接收中断
66 1 {
67 2 RI=0; //清除中断标志位
68 2
69 2 RECEIVR_buffer=SBUF; //接收串口数据
70 2
71 2 if(point==0) //如果还没有接收到起始位
72 2 {
73 3 if(RECEIVR_buffer==0x0a) //判断是否起始标志位
74 3
75 3 point++; //是准备接收下一位
76 3
77 3 else
78 3 point=0; //不是,继续等待起始位
79 3 }
80 2 else if(point>0&&point<10) //判断是否接收够十位数据
81 2 {
82 3 buffer[point++]=RECEIVR_buffer; //不够,把接收到的数据放入接收缓存区
83 3 }
84 2 else point=0; //缓冲区已满,清除缓存区内数据重新接收
85 2 }
86 1 }
87 //--------------------------------------------------------------------------------------------------
88 // 函数名称: 显示缓冲区转换
89 // 函数功能: 转换显示缓存
90 //--------------------------------------------------------------------------------------------------
91 void DIS_change()
92 {
93 1 DIS_one=buffer[1];
94 1 DIS_two=buffer[2];
95 1 DIS_thr=buffer[3];
96 1 DIS_for=buffer[4];
97 1 DIS_fiv=buffer[5];
98 1 DIS_six=buffer[6];
99 1 DIS_sev=buffer[7];
100 1 DIS_eig=buffer[8];
101 1 }
102 //--------------------------------------------------------------------------------------------------
103 // 函数名称: 显示函数
104 // 函数功能: 动态显示八位
105 //--------------------------------------------------------------------------------------------------
106 void dis(void)
107 {
108 1 {
109 2 aa=0;
110 2 duanma=disp_code[DIS_one];
111 2 delayms(2);
112 2 duanma=disp_code[10];
113 2 aa=1;
114 2
115 2 bb=0;
116 2 duanma=disp_code[DIS_two];
117 2 delayms(2);
C51 COMPILER V8.02 DDD 04/16/2009 01:17:07 PAGE 3
118 2 duanma=disp_code[10];
119 2 bb=1;
120 2
121 2 cc=0;
122 2 duanma=disp_code[DIS_thr];
123 2 delayms(2);
124 2 duanma=disp_code[10];
125 2 cc=1;
126 2
127 2 dd=0;
128 2 duanma=disp_code[DIS_for];
129 2 delayms(2);
130 2 duanma=disp_code[10];
131 2 dd=1;
132 2
133 2 ee=0;
134 2 duanma=disp_code[DIS_fiv];
135 2 delayms(2);
136 2 duanma=disp_code[10];
137 2 ee=1;
138 2
139 2 ff=0;
140 2 duanma=disp_code[DIS_six];
141 2 delayms(2);
142 2 duanma=disp_code[10];
143 2 ff=1;
144 2
145 2 gg=0;
146 2 duanma=disp_code[DIS_sev];
147 2 delayms(2);
148 2 duanma=disp_code[10];
149 2 gg=1;
150 2
151 2 hh=0;
152 2 duanma=disp_code[DIS_eig];
153 2 delayms(2);
154 2 duanma=disp_code[10];
155 2 hh=1;
156 2 }
157 1 }
158
159 //--------------------------------------------------------------------------------------------------
160 // 函数名称: 主函数
161 // 函数功能: 调度个子函数,完成通信过程
162 //--------------------------------------------------------------------------------------------------
163 void main(void)
164 {
165 1 UART_init(); //初始化串口
166 1 do
167 1 {
168 2 DIS_change();
169 2 dis();
170 2 }
171 1 while(1);
172 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 273 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V8.02 DDD 04/16/2009 01:17:07 PAGE 4
DATA SIZE = 30 ----
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 + -