📄 main.lst
字号:
C51 COMPILER V7.02a MAIN 07/10/2006 12:05:33 PAGE 1
C51 COMPILER V7.02a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 /*==============================================================================================
3 Copyright (C), 2005, RegalCyber Tech. Co., Ltd.
4 File name: main.C
5 Author: Zhangui Duan Version: v1.3 Date: 2005-3-30
6
7 Description:
8 此程序文件主要是完成接收读卡器的寻卡信号,再发送四字节的卡号
9 1,主程序
10 2,初始化CPU,I/O口,串口,RTC,SPI等
11 Other Description:
12 由 Keil C51 V7.05 编译通过
13
14 Function List:
15 1. 主程序
16 void main(void);
17 2, 初始化程序
18 void Init(void);
19
20 History:
21 1. Date: 2005-6-12
22 Author:Zhangui Duan
23 Modification: 由于卡号要与普通的IC卡兼容,将卡号设置为4个字节,所以发送的有效数据宽度
24 由原来的40位改为48位(1字节前置码+4字节卡号+1字节校验字节),同时发送缓冲区直接设置
25 为数组,字节长度为6字节
26
27 ==============================================================================================*/
28 #include "main.h"
29 //#include "adc.h"
30 #include <stdio.h>
31 //#define DEBUG 1
32
33 unsigned char code R_T1[61] = {254,241,230,219,209,199,190,181,172,165,157,150,143,137,130,125,119,114,
34 109,104,100,96,92,88,84,81,77,74,71,68,65,63,60,58,55,53,51,49,47,45,43,
35 42,40,39,37,36,35,33,32,31,30,29,28,27,26,25,24,23,22,21,20};
36 //unsigned char code R_T2[25] = {242,228,215,203,192,182,172,162,154,146,138,131,124,117,111,106,100,95,90
-,
37 // 86,82,78,73,70,67}; /4
38 unsigned char code R_T2[45] = {240,224,210,197,184,173,162,152,143,134,126,118,111,105,98,93,87,82,78,73,
39 69,65,62,58,55,52,49,46,44,42,39,37,35,34,32,30,29,27,26,25,23,22,21,20,19}; // /14
40
41
42 void Temperature_test(void)
43 {
44 1 unsigned char i,j;
45 1 char Tempteratrue = 0;
46 1 unsigned char Rntc = 0; //热敏电阻的阻值
47 1 unsigned long Time1 = 0; //标准电阻充放电时间
48 1 unsigned long Time2 = 0; //热敏电阻充放电时间
49 1 P0_DIR = 0x00; //R RT C端都设为输出
50 1 P_Rsta = 0; //放电
51 1 P_Rntc = 0;
52 1 P_Ctest = 0;
53 1 Delay100us(100);
54 1 P0_DIR = 0x28; //RT C端设为输入,R端设为输出
C51 COMPILER V7.02a MAIN 07/10/2006 12:05:33 PAGE 2
55 1 P_Rsta = 1; //通过电阻R对C充电
56 1 while(P_Ctest != 1)
57 1 {
58 2 Time1++ ;
59 2 }
60 1 P0_DIR = 0x00; //R RT C端都设为输出
61 1 P_Rsta = 0; //放电
62 1 P_Rntc = 0;
63 1 P_Ctest = 0;
64 1 Delay100us(100);
65 1 P0_DIR = 0x18; //R C端设为输入,RT端设为输出
66 1 P_Rntc = 1; //通过热敏电阻RT对C充电
67 1 while(P_Ctest != 1)
68 1 {
69 2 Time2++;
70 2 }
71 1 Rntc = (unsigned char)((0x64*Time2)/Time1); //计算出热敏电阻值
72 1 for(i = 0;i<62;i++)
73 1 {
74 2 if((Rntc <= R_T1[i] )&& (Rntc > R_T1[i+1])) Tempteratrue = 5+i;
75 2 if(Rntc >254)
76 2 {
77 3 for(j = 0; j<46 ;j++)
78 3 {
79 4 if(((Rntc/14) <= R_T2[j])&& ((Rntc/14) > R_T2[j+1]))Tempteratrue = (-40)+i;
80 4 }
81 3 }
82 2 }
83 1 PutChar(Tempteratrue);
84 1 }
85
86
87
88 /**********************************************************************************************
89 Function: main
90 Description: 定时休眠,通过RTC唤醒,
91 判断收到寻卡信号,发送卡号,并判断是否出了此区域,
92 Calls:
93 Init();
94 Init_Receiver();
95 Transmitter();
96 Delayms();
97 Receiver();
98 Called By:
99 Input:
100 Output:
101 Return:
102 Others:
103 **********************************************************************************************/
104 void main(void)
105 {
106 1 // unsigned char _set_card;
107 1 unsigned char temp= 0;
108 1 // _set_card=Config();//接收配置读卡器发送过来的卡号,并返回卡号
109 1 // RW_Flash(_set_card);//存储或者是从eeprom中取出卡号和配置参数
110 1 Init();
111 1 // InitADC();
112 1 // TxBuf[0]=TransmitCardNo;//前置码
113 1 // TxBuf[13]=TxBuf[1]^TxBuf[2]^TxBuf[3]^TxBuf[4]^TxBuf[5]^TxBuf[6]^TxBuf[7]
114 1 // ^TxBuf[8]^TxBuf[9]^TxBuf[10]^TxBuf[11]^TxBuf[12]; //校验字节
115 1 // WriteRTC(TIME/TICK); //设置唤醒定时器
116 1 while(1)
C51 COMPILER V7.02a MAIN 07/10/2006 12:05:33 PAGE 3
117 1 {
118 2 Temperature_test();
119 2 // Delay100us(4000);
120 2 //----------------------------------------------
121 2 //发送卡号
122 2 //----------------------------------------------;
123 2 //REGX_CTRL = 0x0b; //关闭唤醒定时器
124 2 //while(REGX_CTRL & 0x10) // Wait for the interface to be ready
125 2 //
126 2 /* ;
127 2 #ifdef DEBUG
128 2 LED4=0;
129 2 PutChar(0x55);
130 2 Delayms(1);
131 2 LED4=1;
132 2 #else
133 2 Temperature_test();
134 2
135 2 //temp = Temperature_test();
136 2 // PutChar(temp);
137 2 //PutChar(0x77); //test
138 2 // Transmitter(&TxBuf[0]);//发送卡号
139 2 #endif
140 2 Delay100us(1);
141 2 CK_CTRL=0x03;//省电模式
142 2 */
143 2 }
144 1 }
145
146 /*************************************************
147 Function: RW_Flash
148 Description: 参数配置
149 1,将配置参数存入FLASH中
150 2,从FLASH中读出配置参数
151 Calls: void EEInit(void);
152 unsigned char EERead(unsigned int addr);
153 void EEWrite(unsigned int addr, unsigned char b);
154 Called By: void main(void)
155 Input: set_card
156 根据此输入值判断是否有进行参数配置
157 Output:
158 Return:
159 Others:
160 *************************************************/
161 void RW_Flash(unsigned char set_card)
162 {
163 1 unsigned char m;
164 1 unsigned int addr_card,config_addr;
165 1 EEInit(); //eeprom 初始化
166 1 config_addr=Addr_Cardno+12;//初始化配置参数存放地址
167 1 //--------------------------------------------//
168 1 //如果需要配置,则将卡号和配置参数写到FLASH中
169 1 if(set_card)
170 1 {
171 2 if(!((RxBuf[1]==0)&&(RxBuf[2]==0)&&(RxBuf[3]==0)&&(RxBuf[4]==0)&&(RxBuf[5]==0)&&(RxBuf[6]==0)
172 2 &&(RxBuf[7]==0)&&(RxBuf[8]==0)&&(RxBuf[9]==0)&&(RxBuf[10]==0)&&(RxBuf[11]==0)&&(RxBuf[12]==0)))
173 2 {
174 3 //如果12字节卡号数据全部为0,则发送过来的卡号数据就不需要存储到FLASH中
175 3 for(m=1,addr_card=Addr_Cardno;m<13;m++,addr_card++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -