📄 ch451_start.lst
字号:
C51 COMPILER V8.08 CH451_START 08/20/2007 02:08:00 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE CH451_START
OBJECT MODULE PLACED IN ch451_start.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ch451_start.c BROWSE DEBUG OBJECTEXTEND
line level source
1 // CH451
2 // AT89C51 C语言程序
3 //Web:http//winchiphead.com
4 //Author: yhw 2003.7
5
6 //初始化子程序
7 #include<aduc845.h>
8 #include "ch451.h"
9 void ch451_init()
10 {
11 1 ch451_din=0; //先低后高,选择4线输入
12 1 ch451_din=1;
13 1 #ifdef USE_KEY
IT1=0; //设置下降沿触发
IE1=0; //清中断标志
PX1=0; //设置低优先级
EX1=1; //开中断
#endif
19 1
20 1 }
21 //*****************************************************
22
23 //输出命令子程序
24 //定义一无符号整型变量存储12字节的命令字。
25 void ch451_write(unsigned int command)
26 {
27 1 unsigned char i;
28 1 #ifdef USE_KEY
EX1=0; //禁止键盘中断
#endif
31 1 ch451_load=0; //命令开始
32 1 for(i=0;i<12;i++){ //送入12位数据,低位在前
33 2 ch451_din=command&1;
34 2 ch451_dclk=0;
35 2 command>>=1;
36 2 ch451_dclk=1; //上升沿有效
37 2 }
38 1 ch451_load=1; //加载数据
39 1 #ifdef USE_KEY
EX1=1;
#endif
42 1 }
43
44 #ifdef USE_KEY
//*************************************************
//输入命令子程序,MCU从451读一字节
unsigned char ch451_read()
{
unsigned char i;
unsigned char command,keycode; //定义命令字,和数据存储器
EX1=0; //关中段
command=0x07; //输入读451命令字
ch451_load=0;
for(i=0;i<4;i++){
C51 COMPILER V8.08 CH451_START 08/20/2007 02:08:00 PAGE 2
ch451_din=command&1; //送入最低位
ch451_dclk=0;
command>>=1; //往右移一位
ch451_dclk=1; //产生时钟上升沿锁通知CH451输入位数据
}
ch451_load=1; //产生加载上升沿通知CH451处理命令数据
keycode=0; //清除keycode
for(i=0;i<7;i++){
keycode<<=1; //数据移入keycode,高位在前,低位在后
keycode|=ch451_dout; //从高到低读入451的数据
ch451_dclk=0; //产生时钟下升沿通知CH451输出下一位
ch451_dclk=1;
}
IE1=0; //清中断标志
EX1=1;
return(keycode); //反回键值
}
//*************************************************
//中断子程序 使用中断2,寄存器组1
void ch451_inter() interrupt 2 using 1
{
unsigned char i; //定义循环变量
unsigned char command,keycode; //定义控制字寄存器,和中间变量定时器
command=0x07; //读取键值命令的高4位0111B
ch451_load=0; //命令开始
for(i=0;i<4;i++){
ch451_din=command&1; //低位在前,高位在后
ch451_dclk=0;
command>>=1; //右移一位
ch451_dclk=1; //产生时钟上升沿锁通知CH451输入位数据
}
ch451_load=1; //产生加载上升沿通知CH451处理命令数据
keycode=0; //清除keycode
for(i=0;i<7;i++){
keycode<<=1; //数据作移一位,高位在前,低位在后
keycode|=ch451_dout; //从高到低读入451的数据
ch451_dclk=0; //产生时钟下升沿通知CH451输出下一位
ch451_dclk=1;
}
ch451_key=keycode; //保存上次的键值
IE1=0; //清中断标志
}
//***********************************************
#endif
104
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 31 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -