钻石会员
主题
回帖0
积分13238
阅读权限50
注册时间2010-8-9
最后登录1970-1-1
在线时间 小时
|
芯片 正在学习中 ATMEGA128A-AU
编译器 AVR Studio
硬件 lcm240128 ,at24c256,spi无线模块一个 按键8个 led1个
熔丝位 未开启看门狗
出错位置 : ETIMSK |= (1<<OCIE3A)|(1<<OCIE3B)|(1<<TOIE3);//(1<<OCIE3C)|//扩展中断屏蔽寄存器位:
TIMSK |= (1<<OCIE1A)|(1<<OCIE1B)|(1<<TOIE1);//(1<<OCIE3C)|//中断屏蔽寄存器位:
// ETIMSK |= (1<<OCIE1C);
出错详细:定时器1和3的 中断屏蔽寄存器和扩展的中断屏蔽寄存器 位 》》 OCIE3C和OCIE1C《《 不能置位(只要有一位置位就异常) 仅此两位出错其他位正常 当这两位置位时 启动定时器 lcm240128闪屏(背光正常字没了,电压无波动) 字也不显示了 开始没在意 后来检查原因发现 lcm240128_rst被周期性拉低(频率大约3hz左右),《lcm240128_rst位》 在主循环中没有被改变 后来在程序中加入led_1,led_0; 位置如下 启动定时器后 led闪烁 程序其他位置未调用led_1,led_0; (好像是程序重启一样 但是寄存器数值没有丢失,一直闪下去,和rst复位还不一样 可以复位不开定时器正常) oc1c和oc3c物理引脚连接和未连接一样 定时器不论工作在那个模式也一样 本来学习的定时器3,出错了 把定时器1写进去了也一样 OCIE3C和OCIE1C是使能中断的 1C和3C匹配中断中就一个赋值语句 1A,1B 和3A,3B 正常所有匹配中断程序里的语句一样 如果老师有时间帮忙看看全部程序 主要针对结构行和可读性方面指点下 也是学习很久了 自己写的程序过半月随便找个变量自己都不认识了 所以这次要把程序的结构和可读性学好 全部程序在附件
新建 文本文档 (2).txt
(69.35 KB, 下载次数: 356)
int main(void)//主函数
{
// error_dm=0x01;
led_1;////??????????????????????????????????????????????????????????????<<<<<<<<<<
_delay_ms(90);
t_c_0_init();//定时器0 用于扫描按键
IO_init();//m128io初始化
lcm_init();//lcm初始化
sei();//使能中断
spi_init();//spi初始化
rido_init();//无线模块复位初始化
twi_init();//twi端口初始化
while(1)
{
led_0;//??????????????????????????????????????????????????????<<<<<<<<<<
lcm_write_txt();//显示文本
start_order();//执行命令 定时器工作有按键控制开启和停止 只在主循环有
if(error_dm != 0x00)
error_txt();
_delay_ms(90);
}
} |
|