现象是从机不开中断,发送应答信号给主机就能显示。从机开中断情况下不知道是不 显示还是乱码
单片机主机程序如下:
//*主机程序
//主机中断初始化
//INT0接收从机数据中断申请 标志位IE0 从机P3.4引脚
//INT1接收从机应答 标志位IE1 从机P3.5引脚
//主机P3.4发送从机数据中断申请 低电平有效
//主机P3.5发送从机应答 低电平有效
SETB EX0 //INT0中断开
SETB IT0 //INT0低电平方式触发中断
SETB PX0 //INT0高优先
SETB EX1 //INT1中断开
SETB IT1 //INT1低电平方式触发中断
CLR PX1 //INT1低优先
SETB EA //中断开
LJMP MAIN
MAIN:
PUSH ACC
MOV R7,#0X0F //D1循环16次
MOV A,#0X41 //字符A准备送IO口
D1: MOV P1,A //字符A送p1口
CLR P3.5 //申请从机中断int1
JNB IE1,$ //从机响应信号
SETB P3.5
CLR IE1 //IE标志位是否需要手动清除
INC A //A加1成字符b
DJNZ R7,D1
POP ACC
sjmp $
end
从机程序如下:
//*从机程序
//从机中断初始化
//INT0接收主机数据中断申请 标志位IE0 主机P3.4引脚
//INT1接收主机应答 标志位IE1 主机P3.5引脚
//P3.4发送主机数据中断申请 低电平有效
//P3.5发送主机应答 低电平有效
SETB EX0 //INT0中断开
SETB IT0 //INT0低电平方式触发中断
SETB PX0 //INT0高优先
SETB EX1 //INT1中断开
SETB IT1 //INT1低电平方式触发中断
CLR PX1 //INT1低优先
SETB EA //中断开
LJMP MAIN
WRCMD: //写指令子程序
push ACC
lcall READ12864BF
POP ACC
MOV A,R3
MOV DPTR,#009000H //lcd写指令地址 9000H
MOVX @DPTR,A
RET
WRDAT: //写数据子程序
push ACC
lcall READ12864BF
POP ACC
MOV A,R4
MOV DPTR,#00B000H //lcd写写数据地址 B000H
MOVX @DPTR,A
RET
INIT: //lcd初始化程序
MOV R3,#0X38
LCALL WRCMD
MOV R3,#0X38
LCALL WRCMD
MOV R3,#0X0c
LCALL WRCMD
MOV R3,#0X06
LCALL WRCMD
MOV R3,#0X01
LCALL WRCMD
RET
MAIN: //主程序
LCALL INIT
Q1: MOV R3,#0x80 //R3是lcd1602显示地址入口
MOV R7,#0X0F //Q2循环次数
Q2:
JNB IE1,$ //接收主机中断申请
MOV R4,P1 //R4是lcd1602显示内容数据入口,将主机发送到P1的值传到R4
CLR P3.5 //发送应答信号
CLR IE1
SETB P3.5
LCALL WRDAT
DJNZ R7,Q2
CLR EA
SJMP $
READ12864BF: //lcd判断忙子程序
MOV DPTR,#0XD000 //lcd读指令地址 D000H
MOVX A,@DPTR
JB ACC.7,READ12864BF
ret
END
|