当前位置:编程学习 > 汇编语言 >>

8255A应用问题

单片机编程后控制8255A PA口 输出一个全为1的8位2进制数,但是8255A的PA口输出全为0。用示波器测量8255的CS A0 A1 端信号以及D0~D7输入均正常,就是没输出!! 起初怀疑8255A坏了,但是将8255A和板子上其他片子(如373,138等)换在另一块电路相同的板子上8255就正常了,两块板子电路图一样的,所以换的时候单片机的程序也没有改。两块板子除了有细微的布局差别之外没有其他差别了。 板子上各接电源接地都正常,单片机各信号和程序一致,8255A输入端各信号也正常,为什么就是没输出呢?不明白了,求教各位专家教授~~~急!!!
补充:查看了8255读写时序,两块板子比较出来电平和干扰有细微差别,读写信号和数据都是一样的,单片机复位后也做了延时........
我把PA0直接拉高以后写了一段读A口的程序:
main()
unsingned int a;
com8255=0x90;
P1=0X00;
while(1)
{
a=PA8255;
P1=a;
}
用示波器看到P10是持续高电平,P1其他脚都是密密的脉冲,我认为是8255A口的PA1~PA7悬空的原因,不知道对不对。反正这片8255A是可以读了,但是换成写程序后就没有反应了,查看片选 读写 输入 信号都是正常的,而同样的程序换成别人的板子这个8255就工作正常了(两块板子电路都差不多的...郁闷了),不知道什么原因.......
追问:听了你的建议采用了上述的读数据的做法,看来读是正常的
我把PB口的八位连接到对应的PA口的八位,然后PB口输出一个数再用单片机从PA口读出来后在LCD上显示,但是显示的还是PA口预置的数据。比如PA0口接个5.6k的电阻拉高,其他的拉低,而单片机写PB0口00000110,如果单片机读到的是PB口的数据将显示6,如果没读到将显示0。实验结果是0。
答案:再将另8个外设的状态通过b口读入al
这样,ax中即为外设的16个状态信号。
判断ax中‘1’的方法:
将ax中的内容每次左移一位,将最高位移入标志寄存器中的cf,判断cf的值是否为1,连续左移、判断16次即可。
程序如下:
mov bl,0 ;存放ax中1的个数,初值为0
mov  cx,16 ;循环次数初值
next:shl ax,1
     jnc go
     inc bl
  go:loop next
mov al,bl

也可写为:
mov bl,0 ;存放ax中1的个数,初值为0
mov  cx,16 ;循环次数初值
next:shl ax,1
     adc bl,0;直接将移位后cf的值加到bl
     loop next
mov  al,bl
最后将al中的低四位通过c口送给所连的四个发光二极管
其他:电路连接问题。你可以分别写一些程序逐一进行测试 

上一个:怎么学习linux arm的 汇编,我对汇编一窍不通,要怎么学习
下一个:国际墨香怎么打汉字???

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,