概述
例:设8254的口地址为40H ~ 43H,要求2#计数器工作在方式3,计数初值=4000,写出2#的初始化程序段。
解1:
设初值为2进制,初值写入顺序为先低8位后高8位
MOV AL, 10110110B
OUT 43H, AL
MOV AX, 4000
OUT 42H, AL
MOV AL, AH
OUT 42H, AL
解2:
设初值为2进制,写入顺序为仅写高8位
MOV AL, 10100110B
OUT 43H, AL
MOV AL, 40
OUT 42H, AL
注意:解2是错误的,因为4000=0FA0H,其低8位不等于0。
解3:
设初值为BCD码,写入顺序为先低后高
MOV AL, 10110111B
OUT 43H, AL
MOV AL, 0
OUT 42H, AL
MOV AL, 40H
OUT 42H, AL
解4:
设初值为BCD码,仅写高8位
MOV AL, 10100111B
OUT 43H, AL
MOV AL, 40H
OUT 42H, AL
注意:4000的BCD码数应写成4000H,解3、解4是正确的。
程序中如何表示BCD码数?
设初值 =
(
1234
)
10
(1234)_{10}
(1234)10
则 MOV AX,1234H 是正确的
写成 MOV AX, 1234 是错误的
个人理解:BCD码表示的就是没有A~F的16进制数,而十进制数转换成BCD是按每一位来表示的。所以十进制==BCD码。
拿4000来举例子,如果要存一个4000的数
存二进制,存的就是0FA0H
存BCD码,存的是4000H。
一个普通的十进制数,存到寄存器中,就自动转换为2进制了,低8位和高8位就会出错。
而把十进制数用BCD码来存,低8位和高8位就不会出问题。
最后
以上就是精明大神为你收集整理的8254初始化编程例题的全部内容,希望文章能够帮你解决8254初始化编程例题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复