📄 text1.lst
字号:
C51 COMPILER V7.50 TEXT1 06/17/2007 20:27:35 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: D:\kc\C51\BIN\C51.EXE Text1.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "c8051f020.h"
3
4
5 sbit key_key = P3^6;
6 sbit Clock_7281 = P3^5;
7 sbit Data_7281 = P3^4;
8
9 unsigned char Timer3Counter1;
10 unsigned char key_value[8]={0};
11 unsigned char key_value1[8];
12 unsigned char add[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98,0x88,0x83,0xc6,0xa1,0x86,0x8e};
13 unsigned char add1[8]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
14 bit key_flag;
15
16
17 //外部中断6(键盘用)
18 void ExtentInt6 (void) interrupt 18 {
19 1 P3IF &= 0XBF;
20 1 key_flag = 1;
21 1 }
22 //定时器3中断
23 void Timer3Int(void) interrupt 14 {
24 1 TMR3CN &= 0X7F; //清中断标志
25 1 Timer3Counter1++;
26 1 }
27 /******************** 系统函数 ********************/
28 // 端口初始化
29 void PortInitialization ( void ) {
30 1 //*******************************//
31 1 //PXDIN : 0=模拟输入;1=数字输入.//
32 1 //*******************************//
33 1 //*******************************//
34 1 //PXDOUT : 0=漏极开路;1=推挽输出.//
35 1 //*******************************//
36 1
37 1 XBR0 = 0X00;
38 1 XBR1 = 0X00; //
39 1 XBR2 = 0X00; //关闭弱上拉
40 1
41 1 EMI0CN = 0; //
42 1 EMI0CF = 0X2c; //外部存储器高端复用方式
43 1 EMI0TC = 0Xcf; //时序选择,地址建立时间很重要哦
44 1
45 1 P3MDOUT = 0X20; //
46 1 P3 = 0X70; //
47 1 XBR2 = 0X40; //交叉开关使能
48 1
49 1 P74OUT = 0XFF; //推挽输出,总线上都接上拉电阻;
50 1 //如果漏开则不行因为1将其置为高阻
51 1 }
52 // 将系统时钟设置为外部时钟 24 MHZ
53 void ExternalClock ( void ) {
54 1 unsigned int i;
55 1 OSCXCN = 0x67; // 定义外部时钟,并使能
C51 COMPILER V7.50 TEXT1 06/17/2007 20:27:35 PAGE 2
56 1 for (i = 3000;i > 0;i--); // 等待 1 ms,使外部时钟稳定
57 1 while ((OSCXCN & 0x80) == 0); // 检测时钟准备好标志
58 1 OSCICN = 0x08; // 禁止内部时钟,选择外部时钟
59 1 }
60
61 void ExternIntInit(void){ //外部中断初始化
62 1
63 1 P3IF = 0X00; //下降沿触发,中断向量为18
64 1 EIE2 = 0X10; //允许EX6中断
65 1 }
66
67 void Timer3Init(){ //定时器3初始化
68 1 TMR3CN = 0X00;
69 1 TMR3RLL = 0X30; //1ms定时
70 1 TMR3RLH = 0XF8;
71 1 TMR3L = 0X30;
72 1 TMR3H = 0XF8;
73 1 EIE2 |= 0X01; //ET3 = 1;
74 1 }
75
76 void Delay ( unsigned int n ) {
77 1 for ( ; n > 0; n --);
78 1 }
79 //R=3K3,C=20PF,OSC=4.5MHz
80 //#pragma disable //关中断
81 void Write_7281 ( unsigned char ddata ) {
82 1 unsigned char i;
83 1 Data_7281 = 1; //漏开置1
84 1 Clock_7281 = 0; //9us
85 1 Clock_7281 = 1;
86 1 do { // 建立握手信号,发送一系列脉冲
87 2 Clock_7281 = 0;
88 2 Delay(6);
89 2 Clock_7281 = 1;
90 2 Delay(6);
91 2 } while ( Data_7281 ); // 等待bc7281a 发送低电平,表示准备好
92 1
93 1 Clock_7281 = 0; // 15us内再发送一时钟信号
94 1 Delay(6);
95 1 Clock_7281 = 1;
96 1 Delay(6);
97 1
98 1 while ( !Data_7281 ); // Data_7281 回高电平
99 1 for( i = 0; i < 8; i ++ ) {
100 2 if ( ddata & 0x80 ) // 发送第7..0位
101 2 Data_7281 = 1;
102 2 else
103 2 Data_7281 = 0;
104 2 Delay(10);
105 2 ddata = ddata << 1; // 发送一时钟信号
106 2 Clock_7281 = 0;
107 2 Delay(6);
108 2 Clock_7281 = 1;
109 2 Delay ( 6 ); // 延时
110 2 }
111 1 Data_7281 = 1; // 回高电平
112 1 Clock_7281 = 1;
113 1 Delay ( 1 );
114 1 }
115
116
117 // bc7281a 字节读
C51 COMPILER V7.50 TEXT1 06/17/2007 20:27:35 PAGE 3
118 //#pragma disable //关中断
119 unsigned char Read_7281 ( void ) {
120 1 unsigned char i;
121 1 unsigned char ddata =0 ;
122 1
123 1 Data_7281 = 1; //漏开置1
124 1
125 1 Clock_7281 = 0; // 发送一单一握手脉冲 25us
126 1 Delay(6);
127 1 Clock_7281 = 1;
128 1 Delay(6);
129 1
130 1 while ( Data_7281 ); // 等待bc7281a 发送低电平,表示准备好
131 1
132 1 Data_7281 = 1; //漏开置1
133 1 Clock_7281 = 0; // 15us内再发送一时钟信号 9us
134 1 Delay(6);
135 1 Clock_7281 = 1;
136 1 Delay(6);
137 1
138 1 for ( i = 0; i < 8; i ++ ) {
139 2 Delay ( 20 );
140 2 Data_7281 = 1; //漏开置1
141 2 ddata = ddata << 1;
142 2 if ( Data_7281 ) // 接收第7..0位
143 2 ddata = ddata | 0x01;
144 2 Clock_7281 = 0; // 15 us内发送一时钟信号
145 2 Delay ( 10 );
146 2 Clock_7281 = 1;
147 2 Delay(10);
148 2 }
149 1 Clock_7281 = 0; // 发送一时钟信号,表示接收完毕
150 1 Delay ( 12 );
151 1 Clock_7281 = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -