avr外围电路

sealcold   2009-5-13 15:52 楼主
我用avr mega16单片机运行一个最简单的程序,在学习板上能运行,我把单片机焊在另一块电路板上就不能用了,输出的电平不正确(只连接了vcc和gnd).下面是程序,谁帮我解决一下啊。
  1. ////////////////////////////////////
  2. //T0_DEMO
  3. //
  4. //PA口接LED的段码
  5. //PC0~PC3口接四位位选
  6. //////////////////////////////
  7. #include
  8. #include

  9. #define                fose        7372800

  10. unsigned int time_10ms;
  11. unsigned int time_s;
  12. unsigned char DISP_NUM;                //显示的位数
  13. unsigned char BitTab[]={0xFE,0xFD,0xFB,0xF7};        //三位位选码
  14. //unsigned char DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //LED字形码
  15. unsigned char DispTab[]={0x3F,0x30,0x9B,0xB9,0xB4,0xAD,0xAF,0x38,0xBF,0xBD}; //修正都的LED字形码
  16. unsigned char DISP_DATA[4];                //显示的数字

  17. void Display(void);

  18. //显示函数,DISP_NUM决定显示哪个LED
  19. //采用共阴LED动态显示方法,定时中断函数里面调用
  20. void Display(void)               
  21. {
  22. PORTA=DispTab[DISP_DATA[DISP_NUM]];                //PA口接LED的段码
  23. PORTC=BitTab[DISP_NUM];        //PC口接位选

  24. DISP_NUM++;                        //先显示低位,再显示高位
  25. if(DISP_NUM==4)
  26.     DISP_NUM=0;
  27. }

  28. #pragma interrupt_handler timer0comp:20
  29. void timer0comp (void)
  30. {
  31. time_10ms++;
  32. if(time_10ms==100)
  33.         {
  34.         time_10ms=0;
  35.         time_s++;
  36.         if(time_s>6000)
  37.                 time_s=0;
  38.         }

  39. DISP_DATA[0]=time_s/1000;
  40. DISP_DATA[1]=(time_s/100)-(DISP_DATA[0]*10);
  41. DISP_DATA[3]=time_s%10;
  42. DISP_DATA[2]=((time_s%100)-DISP_DATA[3])/10;

  43. Display();
  44. }

  45. void main(void)
  46. {
  47. DDRA=0XFF;
  48. PORTA=0X00;
  49. DDRC=0X0F;
  50. PORTC=0X00;

  51. //t/c0初始化(10ms)
  52. TCCR0=0X0d;
  53. TCNT0=0X00;
  54. OCR0=0X48;
  55. TIMSK=0X02;

  56. time_10ms=0;
  57. time_s=0;

  58. asm("sei");
  59. for(;;)
  60.         {

  61.         }
  62.    
  63.    
  64. }

回复评论 (6)

AVR单片机的熔丝位配置你配了码?板子的晶振与学习板上的一样不?确认板子电源都没问题?
点赞  2009-5-13 16:07
检查一下芯片的焊接,楼主没用外部晶振吧?熔丝位确保一致
点赞  2009-5-13 16:12
没有配置熔丝位,怎么配置?不过我程序里没用外部的晶振,该怎么办?
点赞  2009-5-13 17:36
既然在一处能跑,那就先别想软件的问题

看看你的硬件连接

比较说:你的程序烧进去了吗?啥的
点赞  2009-5-13 18:54
引用: 引用 3 楼 b14254188 的回复:
没有配置熔丝位,怎么配置?不过我程序里没用外部的晶振,该怎么办?

烧录工具应该会有熔丝位置的,你的程序没跑起来可能是开发板上已经给你配置好了,你自己的板子没配置过,而你烧程序的时候又没进行配置
点赞  2009-5-13 19:43
同意楼上的!一般的新AVR芯片都是默认内部RC震荡!而且基本是最低的频率!所以按照你的程序标注应该是7.3728M的晶振!所以程序的运行速度基本为1/8你的刷新等出现了问题!试着改为内部8M看看!
点赞  2009-5-15 15:35
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复