📄 t7281a.lst
字号:
C51 COMPILER V6.12 T7281A 05/31/2004 11:18:28 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE T7281A
OBJECT MODULE PLACED IN .\T7281A.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE .\T7281A.c DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2
3 //*** 函数定义 ***
4 void delay(unsigned char); // 短暂延时
5 void write728x(unsigned char, unsigned char); // 写入到BC728x
6 unsigned char read728x(unsigned char); // 从BC728x读出
7 void send_byte(unsigned char); // 发送一个字节
8 unsigned char receive_byte(void); // 接收一个字节
9
10 //*** 变量及I/O口定义 ***
11 unsigned char key_number;
12 unsigned int tmr;
13 sbit clk=P3^5; // clk 连接于 P3.5
14 sbit dat=P3^7; // dat 连接于 P3.7
15 sbit key=P3^3; // key 连接于 P3.3(INT1)
16
17 //*** 主程序 ***
18 main()
19 {
20 1 for (tmr=0;tmr<0xffff;tmr++); // 等待 BC728x 完成复位
21 1 write728x(0x12,0x80); // 初始化BC728x为164模式,不反相
22 1 while (1)
23 1 {
24 2 while(key); // 等待按键
25 2 key_number=read728x(0x13); // 读键值
26 2 write728x(0x15,0x10+(key_number&0xf0)/16);
27 2 // 在第1位上以HEX译码方式显示键码的高4位
28 2 write728x(0x15,key_number&0x0f);
29 2 // 在第0位上以HEX译码方式显示键码的低4位
30 2 }
31 1 }
32
33 // ***********************************************************
34 // * 写入BC728X, 第一个参数为目标寄存器地址, 第二个参数为要写入的数据 *
35 // ***********************************************************
36 void write728x(unsigned char reg_add, unsigned char write_data)
37 {
38 1 send_byte(reg_add); // 发送寄存器地址
39 1 send_byte(write_data); // 发送数据字节
40 1 }
41
42 // **********************************************************
43 // * 读出 BC728X 内部寄存器的值, 调用参数为寄存器地址 *
44 // **********************************************************
45 unsigned char read728x(unsigned char reg_add)
46 {
47 1 send_byte(reg_add|0x80); // 发送读指令(bit7=1)
48 1 return(receive_byte()); // 接收数据字节并返回
49 1 }
50
51 // ***********************************************************
52 // * 向 BC728X 发送一个字节 *
53 // ***********************************************************
54 void send_byte(unsigned char send_byte)
55 {
C51 COMPILER V6.12 T7281A 05/31/2004 11:18:28 PAGE 2
56 1 unsigned char bit_counter;
57 1 clk=0; // 产生一 clk 脉冲
58 1 clk=1;
59 1 while (dat); // 等待 BC728X 输出 dat 低电平响应
60 1 clk=0; // 再次输出一 clk 脉冲
61 1 clk=1;
62 1 while (!dat); // 等待 BC728X 进入接收状态
63 1 for (bit_counter=0;bit_counter<8;bit_counter++)
64 1 { // 发送 8 个比特
65 2 if ((send_byte&0x80)==0)
66 2 {
67 3 dat=0;// 如果待发bit为0, 置 dat 为 0
68 3 }
69 2 else
70 2 {
71 3 dat=1; // 反之置为 1
72 3 }
73 2 send_byte=send_byte*2; // send_byte 左移一位
74 2 clk=0; // 输出一 clk 脉冲
75 2 clk=1;
76 2 delay(1); // 短暂延时
77 2 }
78 1 dat=1; // 恢复 dat 为高电平
79 1 }
80
81 // ************************************************************
82 // * 从 BC728X 接收一个字节 *
83 // ************************************************************
84 unsigned char receive_byte(void)
85 {
86 1 unsigned char bit_counter, in_byte;
87 1 clk=0; // 发出一 clk 脉冲
88 1 clk=1;
89 1 while (dat); // 等待 BC728X 响应
90 1 clk=0; // 收到响应, 再发一脉冲等待接收数据
91 1 clk=1;
92 1 for (bit_counter=0;bit_counter<8;bit_counter++)
93 1 { // 接收8个bit
94 2 delay(1); // 短暂延时
95 2 in_byte=in_byte*2; // in_byte 左移一位
96 2 if (dat) // 如果 dat 为'1'
97 2 {
98 3 in_byte=in_byte|0x01; // bit0=1
99 3 }
100 2 clk=0; // 输出一 clk 脉冲
101 2 clk=1;
102 2 }
103 1 return(in_byte);
104 1 }
105
106 // ***********************************************************
107 // * 短暂延时程序, 延时时间与参数time成正比, 范围是几个uS到几百个uS *
108 // ***********************************************************
109 void delay(unsigned char time)
110 {
111 1 while (time!=0)
112 1 {
113 2 time--;
114 2 }
115 1 }
C51 COMPILER V6.12 T7281A 05/31/2004 11:18:28 PAGE 3
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 198 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 5
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 + -