永发信息网

AVR的Mega16单片机如何获取寄存器TCNT1H 的值?

答案:2  悬赏:20  手机版
解决时间 2021-02-11 02:02
程序如下:
#include
#include
#include
int main(void)
{
TCCR1B |= 0x04;//分频器设置
TCNT1H = 0x85;//高位寄存器
TCNT1L = 0xEE;//地位寄存器
TIMSK |= (1 << 2);//溢出中断允许
SREG |= (1 << 7);//总中断开关
DDRC = 0xff;
while (1) PORTC = TCNT1H;
}

程序中,我想用C口的八个LED来检测TCNT1H的值,但是,LED的值并不会发生变化,一直为:0x85 。现在因程序需要,我必须想办法获得TCNT1H的值,我想知道是我的程序写错了,还是有寄存器未正确设置?
最佳答案
AVR单片机定时器的TCNT1有一个临时寄存器,用来保存TCNT1的高位字节。在访问TCNT1的时候需要分两次访问:写TCNT1的时候需要先写TCNT1H,再写TCNT1L。在写TCNT1H的时候,实际上是写入到临时寄存器。然后在写入TCNT1L的时候,TCNT1L与临时寄存器的值,被一起写入TCNT1L和TCNT1H;读取的时候正好相反,在读取TCNT1L的时候会导致TCNT1H的值被保存到临时寄存器,然后再读取TCNT1H的值(其实此时读取的是临时寄存器的值)。所以如果仅仅读取高位字节,那么读出的数据其实是上一次写入TCNT1H的值,或者是上一次读取TCNT1L时,保存在临时寄存器的值。看你的程序,因每次只读取TCNT1H,这个值其实是你写入TCNT1H时,保存在临时寄存器中的值,所以不会变化。正确的读取方法是:先读取一次TCNT1L,然后再读取TCNT1H,这样就可以得到正确的值了
全部回答
虽然我很聪明,但这么说真的难到我了
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
金诚宾馆(桂林兴安)怎么去啊,我要去那办事
我是徐师大科文学院2014届学生,由于挂科没拿
格萨尔酒店-西餐厅我想知道这个在什么地方
兴安国梁商务大酒店(桂林兴安)地址在哪,我要
visual assist 有免费版吗
我是结过婚的女人该跟情人继续在一起吗
安华宾馆(桂林兴安)地址有知道的么?有点事想
三生三世十里桃花电视剧什么时候开拍
有部讲五一二汶川地震的电影叫什么
里山头三联超市我想知道这个在什么地方
台灯的英文说明书
中亚经济实力最强的国家
嘉禾宾馆(桂林兴安)地址在哪,我要去那里办事
在我们社会,要使一切创造社会财富的源泉充分
平房烟筒排烟的问题
推荐资讯
山东蓝翔技校强于美国哈佛,为什么
求不定积分∫(dx)/√(1+e^2x)=?如题,求详解QA
中国电信城西支局地址在什么地方,想过去办事
用,蓝天,菊花,枫叶,鱼儿,写一段话120个
2013改款朗逸的通病下雨天刹车有响声太难听
裕田农业开发有限公司这个地址在什么地方,我
红红经典稍麦地址在哪,我要去那里办事
在EXCEL的窗体控件里选定了小方块和小圆点按
小组成员之间权力的竞争和情感波动趋于缩小,
怎么可以让不同的QQ好友显示我不同的头像
如图,PB切圆O于点B,PO交圆O于点A,CA垂直OP交
四川教师招聘是要考过了公招才能去应聘吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?