📄 uart.lst
字号:
C51 COMPILER V8.08 UART 04/02/2009 17:28:56 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN UART.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE UART.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<ADI/ADuC834.h> //sfr定义用头文件
2
3 // Delay routine //延时用子程序
4 //unsigned char data[]={08FE,10F9,0795,09CA};
5
6 #define uchar unsigned char
7 #define uint unsigned int
8
9 sbit rs=P2^3; //1602的数据/指令选择控制线
10 sbit rw=P2^4; //1602的读写控制线
11 sbit en=P2^5; //1602的使能控制线
12
13 unsigned char DIAC[]="0xAC";
14 unsigned char DIBC[]="0xBC";
15 unsigned char DICC[]="0xCC";
16 unsigned char EICC[]="sbuf=0x02";
17 unsigned char g_data=0;
18 unsigned char tcount;
19 void delay(int a)
20 {
21 1 int length;
22 1 for(;a>0;a--)
23 1 {
24 2 length=10000;
25 2 while (length >=0)
26 2 length--;
27 2 }
28 1 }
29 void lcd_wcom(uchar com) //1602写命令函数
30 {
31 1 rs=0; //选择指令寄存器
32 1 rw=0; //选择写
33 1 P0=com; //把命令字送入P2
34 1 delay(5); //延时一小会儿,让1602准备接收数据
35 1 en=1; //使能线电平变化,命令送入1602的8位数据口
36 1 en=0;
37 1 }
38 void lcd_wdat(uchar dat) //1602写数据函数
39 {
40 1 rs=1; //选择数据寄存器
41 1 rw=0; //选择写
42 1 P0=dat; //把要显示的数据送入P2
43 1 delay(5); //延时一小会儿,让1602准备接收数据
44 1 en=1; //使能线电平变化,数据送入1602的8位数据口
45 1 en=0;
46 1 }
47 void lcd_init() //1602初始化函数
48 {
49 1 lcd_wcom(0x38); //8位数据,双列,5*7字形
50 1 lcd_wcom(0x0F); //开启显示屏,关光标,光标不闪烁
51 1 lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
52 1 lcd_wcom(0x01); //清屏
53 1 }
54 void uart_int() interrupt 4
55 {
C51 COMPILER V8.08 UART 04/02/2009 17:28:56 PAGE 2
56 1 unsigned char i;
57 1 if(SBUF&0x32==0x32)
58 1 {
59 2 lcd_wcom(0x80);
60 2 //lcd_wdat('L');
61 2 for(i=0;i<10;i++)
62 2 {
63 3 lcd_wdat(EICC[i]);
64 3 }
65 2 g_data|=SBUF;
66 2 }
67 1 switch(SBUF)
68 1 {
69 2 case 0x32:
70 2 lcd_wcom(0x80+0x40);
71 2 //lcd_wdat('L');
72 2 for(i=0;i<5;i++)
73 2 {
74 3 lcd_wdat(DIAC[i]);
75 3 }
76 2 //curkey=0;
77 2 break;
78 2 case 0x33:
79 2 lcd_wcom(0x80+0x40);
80 2 //lcd_wdat('L');
81 2 for(i=0;i<5;i++)
82 2 {
83 3 lcd_wdat(DIBC[i]);
84 3 }
85 2 //curkey=0;
86 2 break;
87 2 default :
88 2 lcd_wcom(0x80);
89 2 //lcd_wdat('L');
90 2 for(i=0;i<5;i++)
91 2 {
92 3 lcd_wdat(DICC[i]);
93 3 }
94 2 break;
95 2 }
96 1 RI=0;
97 1 }
98 void main(void)
99 {
100 1 uchar i;
101 1 // ES=1;
102 1 // EA=1;
103 1 lcd_init();
104 1 PLLCON=PLLCON&0xF8; //CPU主频为12.58MHZ
105 1 SCON=SCON|0x50; //UART WORK IN MODE 1
106 1
107 1 RCAP2H=-1;
108 1 RCAP2L=-41; //使用定时器T2,产生9600的波特率,数据手册上有
109 1
110 1 T2CON=T2CON|0x30; //设定定 时器T2的工作方式
111 1 TR2=1; //开启定时器T2
112 1 for(;;)
113 1 {
114 2 //g_data=SBUF; //将要发送到串口的数据送入缓冲
115 2 for(;;)
116 2 {
117 3 if(SCON&0x01==0x01) //是否发送完毕
C51 COMPILER V8.08 UART 04/02/2009 17:28:56 PAGE 3
118 3 {
119 4 RI=0; //关串口接收中断
120 4 lcd_wcom(0x80+0x40);
121 4 //lcd_wdat('L');
122 4 for(i=0;i<5;i++)
123 4 {
124 5 lcd_wdat(DIBC[i]);
125 5 }
126 4 if(SBUF)//==0x32)
127 4 {
128 5 lcd_wcom(0x80);
129 5 //lcd_wdat('L');
130 5 for(i=0;i<5;i++)
131 5 {
132 6 lcd_wdat(DIBC[i]);
133 6 }
134 5 }
135 4 }
136 3 break; //退出查寻
137 3 }
138 2 delay(2); //延时
139 2 }
140 1 // for(;;)
141 1 // {
142 1 // SBUF=0x32; //将要发送到串口的数据送入缓冲
143 1 // for(;;)
144 1 // {
145 1 // if(SCON&0x02==0x02) //是否发送完毕
146 1 // TI=0; //关串口接收中断
147 1 // break; //退出查寻
148 1 // }
149 1 // delay(2); //延时
150 1 // }
151 1 }
152
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 291 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 27 ----
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 + -