大家知道由于AVR128系列的是只有8位数据总线,但是如何访问16位的寄存器了,用C语言来写这个当然非常简单(直接就是TCNT1=dat(编译器会自己编译处理的))。
但是用汇编的同学就不同了,要先写16位寄存器的高8位,然后再写低8位,原因就是8位数据总线不可能同时访问一个16位的寄存器,写高8位的时候其实是写入到一个缓冲的寄存器当中,在写入低8位的时候触发这个寄存器,将高低数据一起组合起来写入16位的寄存器中去。(要汇编代码的同学可以要求一下,这里不写出)
#include<iom128v.h>
#include<macros.h>
#include"shumaguan.h"
#include"delay.h" //以前的文章里面写的有的,自己可以去看看
#define uint unsigned int
#define uchar unsigned char
void TIME16_WriteTCNT1(uint j)
{
uchar sreg;
sreg=SREG; //保存全局中断
NOP();
CLI(); //禁止所有中断
NOP();
TCNT1=j; //写16位寄存器
NOP();
SREG=sreg; //恢复全局中断
}
uint TIME16_ReadTCNT1(void)
{
uchar sreg;
uint i;
sreg=SREG; //保存全局中断
NOP();
CLI(); //禁止所有中断
NOP();
i=TCNT1; //读16位寄存器
NOP();
SREG=sreg; //恢复全局中断
return i;
}
void main(void)
{
TIME16_WriteTCNT1(0x22b8); //显示8888
HC_595_init();
while(1)
Seg7_Led_display(TIME16_ReadTCNT1());
}
文章评论(0条评论)
登录后参与讨论