先决条件– 8254控制寄存器和操作模式
问题–在8085微处理器中编写汇编语言程序,如果8254的时钟频率为2 MHz,则使用计数器1作为二进制计数器来生成1 KHz方波。
假设–假设C0(计数器0),C1(计数器1),C2(计数器2),CR(控制寄存器)的端口地址分别为80 H,81 H,82 H,83H。
对于上述问题,8254必须在模式3(方波发生器)中工作。
寄存器的计数为时钟频率/方波频率
计数= 2 MHz / 1 KHz
= 2000
=(07D0)高
现在数据为16位,因此控制寄存器中RW1 = 1和RW0 = 1的值。因为我们要选择C1(计数器1),所以控制寄存器中的SC1 = 0且SC0 = 1。对于控制寄存器中的模式3,M2 = 0,M1 = 1和M2 = 1的值。对于CR中LSB的二进制计数器,其值为0。
因此,控制寄存器(CR)由下式给出:
算法 –
- 在A中移动数据76
- 显示A到端口83的内容
- 将数据D0移动到A
- 显示A到端口81的内容
- 将数据07移动到A中
- 显示A到端口81的内容
- 停止
程序 –
MEMORY ADDRESS | MNEMONICS | COMMENT | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2000 | MVI A 76 | A <- 76 | ||||||||||||
2002 | OUT 83 | CR <- A | ||||||||||||
2004 | MVI A D0 | A <- D0 | 2006 | OUT 81 | C1 <- A | 2008 | MVI A 07 | A <- 07 | 200A | OUT 81 | C1 <- A | 200C | HLT | Stop |
解释-
- MVI A 76用于将CR(控制寄存器)的内容移至寄存器A。
- OUT 83用于将A的值分配给控制寄存器的端口83。
- MVI A D0用于将计数器1的数据的低字节移至寄存器A。
- OUT 81用于将A的值分配给作为计数器1的端口81。
- MVI A 07用于将计数器1的数据的高字节移到寄存器A。
- OUT 81用于将A的值分配给作为计数器1的端口81。
- HLT用于结束程序。