📄 freqtestpro.lst
字号:
C51 COMPILER V8.08 FREQTESTPRO 07/25/2008 09:13:03 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE FREQTESTPRO
OBJECT MODULE PLACED IN freqtestpro.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE freqtestpro.c WARNINGLEVEL(0) OPTIMIZE(SIZE) REGFILE(.\freqteatpro.ORC) BRO
-WSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <stdio.h>
3 #include <ctype.h>
4 #include <intrins.h>
5
6 /***************************************************************
7 * Local Variables
8 ****************************************************************/
9 sbit led1Ctl = P3^7;
10 sbit led2Ctl = P3^6;
11 sbit led3Ctl = P3^5;
12
13 #define LED_ON 1
14 #define LED_OFF 0
15
16 #define LED_N1 1
17 #define LED_N2 2
18 #define LED_N3 3
19
20 /***************************************************************
21 * Time Delay Functions
22 ****************************************************************/
23 /* delay time is (2*n+1)*Ts(1us)+2Ts */
24 static void udelay(unsigned int i)
25 {
26 1 while(--i); // 0: delay 3Ts 1: delay 5Ts 2: delay 7Ts
27 1 }
28
29 #ifdef SYS_NOP
/* Delay 20Ts */
static void nop(void)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
}
#endif /* SYS_NOP */
40
41 /***************************************************************
42 * Led Contorl Function
43 ****************************************************************/
44 void Led_Ctl_Api(unsigned int lednum, unsigned int ledctl)
45 {
46 1 switch(lednum)
47 1 {
48 2 case LED_N1:
49 2 if(ledctl == LED_ON)
50 2 {
51 3 P3 = P3|(1<<7);
52 3 }
53 2 else
54 2 {
C51 COMPILER V8.08 FREQTESTPRO 07/25/2008 09:13:03 PAGE 2
55 3 P3 = P3&(~(1<<7));
56 3 }
57 2 break;
58 2 case LED_N2:
59 2 if(ledctl == LED_ON)
60 2 {
61 3 P3 = P3|(1<<6);
62 3 }
63 2 else
64 2 {
65 3 P3 = P3&(~(1<<6));
66 3 }
67 2 break;
68 2 case LED_N3:
69 2 if(ledctl == LED_ON)
70 2 {
71 3 P3 = P3|(1<<5);
72 3 }
73 2 else
74 2 {
75 3 P3 = P3&(~(1<<5));
76 3 }
77 2 break;
78 2 default:
79 2 printf("LED_Ctl_Api Error:: lednum not in range of 1~3 \n");
80 2 break;
81 2 }
82 1 return;
83 1 }
84
85 /***************************************************************
86 * Uart Contorl Function
87 * --------------------------------------------------------------
88 * 模式1:8位串行数据传送,波特率由计时器1来控制。计时器工作
89 * 于模式2(自动重新载入模式),此时使用的计数器为TL1,而TH1
90 * 则用做自动载入及时制计时值的设定。波特率的计算关系如下:
91 * TH1=256-(2@SMOD*(工作频率))/(384*波特率)
92 * SCON: B7 B6 B5 B4 B3 B2 B1 B0
93 * SM0 SM1 SM2 REN TB8 RB8 TI RI
94 * --------------------------------------------------------------
95 * TOMD: B7 B6 B5 B4 B3 B2 B1 B0
96 * T1&T0 GATE C/T M1 M0 GATE C/T M1 M0
97 * --------------------------------------------------------------
98 * 串口RS232初始化,传输协议 9600bps 8位 没有校验 1个停止位
99 * --------------------------------------------------------------
100 ****************************************************************/
101 /* Uart 1 Init */
102 void Uart_Init_Api(void)
103 {
104 1 PCON = 0x80; //SMOD=1
105 1 //PCO N= 0x00; //SMOD=0
106 1 SCON = 0x52; //Smod1 enable REN=1
107 1 TMOD = 0x20; //Timer 1 Tmod2
108 1 //TH1 = 0xfd; //253 SMOD=0 9600
109 1 TH1 = 0xf4; //253 SMOD=1 4800
110 1 TL1 = 0xf4;
111 1 TCON = TCON|0x40; //TR1=1 启动定时/计数器1
112 1
113 1 return;
114 1 }
115
116 /* Uart 1 Rx */
C51 COMPILER V8.08 FREQTESTPRO 07/25/2008 09:13:03 PAGE 3
117 unsigned char Uart_Rx_Api(void)
118 {
119 1 unsigned char tmpval;
120 1
121 1 if(RI == 1)
122 1 {
123 2 tmpval = SBUF&0xff;
124 2 udelay(2);
125 2 RI = 0;
126 2 }
127 1 else
128 1 {
129 2 //printf("Uart_Rx_Api Error:: no data be received \n");
130 2 return(0);
131 2 }
132 1
133 1 return(tmpval);
134 1 }
135
136 /* Uart 1 Tx */
137 void Uart_Tx_Api(unsigned char sendval)
138 {
139 1 unsigned int iloop = 0;
140 1
141 1 SBUF = sendval;
142 1
143 1 udelay(2);
144 1
145 1 for(iloop=0; iloop<32; iloop++)
146 1 {
147 2 if(TI == 1)
148 2 {
149 3 break;
150 3 }
151 2 }
152 1
153 1 TI = 0;
154 1
155 1 return;
156 1 }
157
158 /* Uart 1 Int Process */
159 unsigned char getdata[32];
160 unsigned int loopHi = 0;
161 unsigned int loopLi = 0;
162 void Uart_Rx_ints(void) //interrupt 4 using 2
163 {
164 1 EA = 0; // Int Lock
165 1
166 1 if(RI == 0)
167 1 {
168 2 return;
169 2 }
170 1 getdata[loopHi] = SBUF;
171 1 loopHi++;
172 1 loopHi = loopHi%32;
173 1 RI = 0;
174 1
175 1 EA = 1; // Int Unlock
176 1
177 1 return;
178 1 }
C51 COMPILER V8.08 FREQTESTPRO 07/25/2008 09:13:03 PAGE 4
179
180 #undef UART_CMD
181 #ifdef UART_CMD
/***************************************************************
* Uart Command Parse
****************************************************************/
void Cmd_Parse_Api(unsigned char command)
{
unsigned char temp;
if(loopLi == loopHi)
{
return;
}
loopLi++;
loopLi = loopLi%32;
temp = getdata[loopLi];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -