📄 main.lst
字号:
C51 COMPILER V7.10 MAIN 05/26/2008 09:41:02 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN .\output\main.obj
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE source\main.c BROWSE DEBUG OBJECTEXTEND PRINT(.\list\main.lst) OBJECT(.\output\m
-ain.obj)
line level source
1 #include<aduc834.h>
2 #include"..\headers\main.h"
3 #include"..\headers\1602.h"
4 #include"..\headers\RS485.h"
5
6 extern unsigned int code AT502[70];
7
8 bit Sample_Flag; //采集标志位
9 sbit LED = P3^5; //LED指示灯
10 unsigned char UART_BUF; //串口接收缓冲单元
11 unsigned char Tem;
12 union { //全局变量,存储AD转换值
13
14 unsigned int AD_Value;
15 unsigned char TEM[2];
16 }v;
17
18 void main ()
19
20 {
21 1 LCD_Init();
22 1 main_Init();
23 1 while(1)
24 1 {
25 2 if(Sample_Flag)
26 2 {
27 3 Sample_Flag =0;
28 3 Sample();
29 3 Tem = Find();
30 3 DDRAM_ADDR_SET(2,0x06); //设置显示位置,第一个参数是行数,第二个参数是第几位
31 3 WR_DAT(Tem/10 +'0'); //显示高位
32 3 WR_DAT(Tem%10 +'0'); //显示低位
33 3 WR_DAT(0X00); //调用CGRAM字库显示度
34 3 WR_DAT(0X43); //显示C
35 3
36 3 }
37 2
38 2 if(UART_BUF =='B') //串口发送温度值
39 2 {
40 3 UART_BUF = 0X00;
41 3 //Tem = 21;
42 3 SendChar(Tem/10 +'0'); //发送温度值十位数
43 3 SendChar(Tem%10 +'0'); //发送温度值个位数
44 3 }
45 2
46 2 if(UART_BUF == 'A') //发送AD转换原始数据
47 2 {
48 3 UART_BUF =0X00;
49 3 SendVar(v.TEM[0]); //发送高位
50 3 SendVar(v.TEM[1]); //发送低位
51 3 }
52 2
53 2 if(UART_BUF == 'C') //进入掉电模式命令
54 2 {
C51 COMPILER V7.10 MAIN 05/26/2008 09:41:02 PAGE 2
55 3 PCON =0x22; //掉电模式,INT0方式唤醒,且PLLCON.0已置位,故TIC中断不唤醒
56 3 }
57 2 }
58 1
59 1 }
60 void main_Init() //系统初始化
61
62 {
63 1 PLLCON = 0x80; //12MHZ /掉电时把晶振关掉(PLLCON.0位)
64 1 TH2=0XFF;
65 1 TL2=0XD7; //9600波特率
66 1 RCAP2H=0XFF;
67 1 RCAP2L=0XD7;
68 1 SCON=0X50; //方式1,允许接收
69 1 T2CON=0X34; //定时器2作为串口波特率发生器
70 1 PCON=0x00; //波特率倍增位0
71 1
72 1 ADC1CON=0x78; //AIN5,单极性
73 1
74 1 INTVAL=0x10; //定时时间1/8s
75 1 TIMECON=0x03; //单位为1/128s
76 1 IEIP2=0x04; //TIC定时中断允许
77 1 // InitDsp(); //1602液晶初始化
78 1 ES = 1; //串口中断允许
79 1
80 1 IT0 =1; //外部中断0 INTO 的相关设置
81 1 EX0 =1;
82 1
83 1 EA=1; //总中断允许
84 1 Sample_Flag = 0 ;
85 1
86 1 }
87 /*********************二分法查找程序*****************************/
88 unsigned char Find()
89 {
90 1 unsigned char Counter_First=0,Counter_Mid=0,Counter_End=69 ;
91 1 unsigned char i;
92 1 for(i=0;i<7;i++)
93 1 {
94 2 Counter_Mid = (Counter_First+Counter_End)>>1; //中间值
95 2 if(v.AD_Value>=AT502[Counter_Mid]) //与中间值比较
96 2 Counter_End = Counter_Mid; //小于中间值则转到前半段
97 2 else
98 2 Counter_First = Counter_Mid; //大于中间值则转到后半段
99 2 }
100 1 return Counter_End; //返回最后的查找值
101 1
102 1
103 1 }
104
105 /*****************温度采集程序******************************/
106 void Sample(void) //采用全局变量传值,故不用参数
107
108 {
109 1 ADC1CON = 0x78; //AIN5,单极性
110 1 ADCMODE = 0x12; //ADC1允许,ADC0关闭,单个转换方式
111 1 while(!RDY1); //等待转换结束
112 1 RDY1 = 0;
113 1 v.TEM[0] = ADC1H;
114 1 v.TEM[1] = ADC1L; //用全局变量联合体存储
115 1
116 1 }
C51 COMPILER V7.10 MAIN 05/26/2008 09:41:02 PAGE 3
117
118 void TIC_INT() interrupt 10
119 {
120 1 LED = ~LED;
121 1 Sample_Flag = 1;
122 1
123 1 }
124
125 void UART_INT() interrupt 4
126
127 {
128 1 UART_BUF = SBUF;
129 1 RI =0;
130 1
131 1 }
132
133
134 void EX0_INT() interrupt 0 //用IRET来唤醒CPU
135
136 {
137 1
138 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 256 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -