AT89C52单片机与ARINC429航空总线接口设计
vx@dptr,a;把字1的低8位锁入U3
movdptr,#c000h
mova,#d1h;取字1的高8位
movx@dptr,a;把字1的高8位锁入U4
clrp3.4;打开U3、U4的输出
nop
clrp1.3;字1数据装入DEI1016
nop
setbp3.4;关闭U3、U4的输出
setbp1.3
movdptr,#e000h
mova,#d2l;取字2的低8位
movx@dptr,a;把字2的低8位锁入U3
movdptr,#c000h
mova,#d2h;取字2的高8位
movx@dptr,a;把字2的高8位锁入U3
clrp3.4;打开U3、U4的输出
nop
clrp1.4;字2数据装入DEI1016
nop
setbp3.4
setbp1.4
用U1接收数据,应将DR1、DR2及TXR经与门U13接至U1的INT0,在INT0口产生中断后,U1便执行读操作,并通过RD和Y5控制U14、U15以读入DR1、DR2及TXR的状态。U2接收到数据或发送数据完毕后,即向U1的INT0口申请中断,并在中断程序中判断DR1、DR2及TXR的状态。TXR为低表明发送完毕,而DR1或DR2为低则表明已收到数据。此时可置P1.2(SEL)为低电平,同时也置P1.0(接DEI1016的OE1)或P1.1?接DEI1016的OE2?为低电平,以使字1的数据出现在数据总线上,而使P1.0、P1.1经U11异或后输出以使U5、U6的G端为高电平,从而把数据锁入U5、U6。由于RD分别与Y7、Y6相或后的输出是与U5、U6的OE门相连接的,因此,U1执行读操作时,应先后打开U5、U6的OE门来把数据读入。其接收程序如下:(以接收器1为例)。
clrp1.2;置DEI1016的SEL=0,读字1
clrp1.0;置DEI1016的/OE1=0
setbp1.1;置DEI1016的/OE2=1
nop
movdptr,#e000h
movxa,@dptr;把字1的低8位读入
mov10h,a
movdptr,#c000h
movxa,@dptr;把字1的高8位读入
mov11h,a
setbp1.2;置DEI1016的SEL=1,读字2
nop
movdptr,#e000h
movxa,@dptr;把字2的低8位读入
mov12h,a
movdptr,#c000h
movxa,@dptr;把字2的高8位读入
mov13h,a
setbp1.0;置DEI1016的/OE1=1
setbp1.1;置DEI1016的/OE2=1
setbp1.2;置DEI1016的SEL=1
图3
DEI1016的两路接收可能产生同时接收的现象。即在上述两路共用一个中断源时,如果某一路申请中断已进入接收程序,那么另一路同时接收的数据就可能被屏蔽。解决方法是:进入中断程序后,在接收数据过程中再查询另一路DR的状态。当然,如果每路单独使用一个中断源,效果将会更好。
4结束语
实际上,上述AT89C52与DEI1016的接口电路经改进也可以应用到其它16位数据总线接口的电路中,而如果用ISP器件替代锁存器及其门电路,还可大大减小电路板的面积。
《AT89C52单片机与ARINC429航空总线接口设计(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/161408.html
movdptr,#c000h
mova,#d1h;取字1的高8位
movx@dptr,a;把字1的高8位锁入U4
clrp3.4;打开U3、U4的输出
nop
clrp1.3;字1数据装入DEI1016
nop
setbp3.4;关闭U3、U4的输出
setbp1.3
movdptr,#e000h
mova,#d2l;取字2的低8位
movx@dptr,a;把字2的低8位锁入U3
movdptr,#c000h
mova,#d2h;取字2的高8位
movx@dptr,a;把字2的高8位锁入U3
clrp3.4;打开U3、U4的输出
nop
clrp1.4;字2数据装入DEI1016
nop
setbp3.4
setbp1.4
用U1接收数据,应将DR1、DR2及TXR经与门U13接至U1的INT0,在INT0口产生中断后,U1便执行读操作,并通过RD和Y5控制U14、U15以读入DR1、DR2及TXR的状态。U2接收到数据或发送数据完毕后,即向U1的INT0口申请中断,并在中断程序中判断DR1、DR2及TXR的状态。TXR为低表明发送完毕,而DR1或DR2为低则表明已收到数据。此时可置P1.2(SEL)为低电平,同时也置P1.0(接DEI1016的OE1)或P1.1?接DEI1016的OE2?为低电平,以使字1的数据出现在数据总线上,而使P1.0、P1.1经U11异或后输出以使U5、U6的G端为高电平,从而把数据锁入U5、U6。由于RD分别与Y7、Y6相或后的输出是与U5、U6的OE门相连接的,因此,U1执行读操作时,应先后打开U5、U6的OE门来把数据读入。其接收程序如下:(以接收器1为例)。
clrp1.2;置DEI1016的SEL=0,读字1
clrp1.0;置DEI1016的/OE1=0
setbp1.1;置DEI1016的/OE2=1
nop
movdptr,#e000h
movxa,@dptr;把字1的低8位读入
mov10h,a
movdptr,#c000h
movxa,@dptr;把字1的高8位读入
mov11h,a
setbp1.2;置DEI1016的SEL=1,读字2
nop
movdptr,#e000h
movxa,@dptr;把字2的低8位读入
mov12h,a
movdptr,#c000h
movxa,@dptr;把字2的高8位读入
mov13h,a
setbp1.0;置DEI1016的/OE1=1
setbp1.1;置DEI1016的/OE2=1
setbp1.2;置DEI1016的SEL=1
图3
DEI1016的两路接收可能产生同时接收的现象。即在上述两路共用一个中断源时,如果某一路申请中断已进入接收程序,那么另一路同时接收的数据就可能被屏蔽。解决方法是:进入中断程序后,在接收数据过程中再查询另一路DR的状态。当然,如果每路单独使用一个中断源,效果将会更好。
4结束语
实际上,上述AT89C52与DEI1016的接口电路经改进也可以应用到其它16位数据总线接口的电路中,而如果用ISP器件替代锁存器及其门电路,还可大大减小电路板的面积。
《AT89C52单片机与ARINC429航空总线接口设计(第2页)》