我是靠谱客的博主 精明大神,最近开发中收集的这篇文章主要介绍8254初始化编程例题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

例:设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初始化编程例题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部