原创 AVR学习笔记之定时器T1基本操作

2011-2-26 19:22 2373 10 10 分类: MCU/ 嵌入式
说明:在此例中,我简单介绍一下用C语言来操作T1的16为寄存器。先写入一个数据到TCNT1,再读取出来显示到数码管。

   大家知道由于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条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条