打印
[AVR单片机]

初学avr。。想问一下问题。。真心求帮助。。

[复制链接]
946|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 774338900 于 2016-8-3 23:20 编辑

用的是mega128.然后我现在就只想实现数码管的静态显示。。可是下面的代码却实现不了。。
#include"iom128v.h"
#include"macros.h"//注意bit函数的使用
#define SRCLK_H PORTB|=BIT(1)//数据串入
#define SRCLK_L PORTB&=~BIT(1)
#define SER_H PORTB|=BIT(2)//数据准备
#define SER_L PORTB&=~BIT(2)
#define RCLK_H PORTB|=BIT(0)//锁存
#define RCLK_L PORTB&=~BIT(0)
const unsigned char DisTab[]={0x3F,0x06,0x5B,0x4F,0x66,             //0,1,2,3,4
                                 0x6D,0x7D,0x07,0x7F,0x6F,             //5,6,7,8,9
                                                         0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};



void delay(unsigned int i)//i过大浮点型长度不够??
{
          unsigned int n;
                             for(n=0;n<i;n++)
                           {
                                           NOP();               
                           }
         
}
void get_595(unsigned char a)//利用PB2口将数据串入595
{
          unsigned char b,i;
          PORTC=~BIT(7);
         DDRC=BIT(7);
         PORTB&=~BIT(3);
          PORTB|=BIT(3);//PB3=1
         DDRB=0XFF;
         RCLK_L;
         for(i=0;i<8;i++)
         {
            if(a&0x80)
                                        SER_H;
                        else
                                        SER_L;
                        SRCLK_L;
                        delay(10);//保证有沿
                        SRCLK_H;
                        a=a<<1;
         }
         delay(10);
         RCLK_H;
}
void dis_595()
{
    PORTB|=0X80;
}
void main()
{
                           DDRA=0X00;
                         PORTA=0XFF;
                         DDRF=0X00;
                         PORTF=0XFF;
                         DDRE=BIT(2);
                         PORTE=0XFF;
                         DDRD=0X00;
                         PORTD=0X00;
                         DDRB=0X00;
                     PORTB=0X0F;
                         DDRC=0X00;
                         PORTC=0XFF;//端口初始化
                   get_595(DisTab[5]);
                         dis_595();
                   while(1);
         
}


而且在win8上一用jtag仿真运行这个程序= =就蓝屏了。。真心求解释。

0EKQNODJ3K@QQD67E]8IT~5.png (59.6 KB )

电路图

电路图

J}ZHC6I4KIE$DR)$S@H4HRG.png (36.92 KB )

J}ZHC6I4KIE$DR)$S@H4HRG.png

相关帖子

沙发
774338900|  楼主 | 2016-8-3 23:22 | 只看该作者
研究了好几天了  用JTAG硬件仿真 到delay函数仿真器就会卡死  把delay手动换成几条NOP指令之后 在get函数还是会卡死  仿真别的程序似乎没有什么问题。。
用proteus仿真试了一下 似乎能够点亮数码管了
不太清楚是什么方面的问题了。。

使用特权

评论回复
板凳
小S咯| | 2019-4-24 14:38 | 只看该作者
楼主,能不能看看你的JTAG硬件调试的连接线路图。。

使用特权

评论回复
地板
阿泉爱学习| | 2019-4-25 09:12 | 只看该作者
是不是编译软件的配置问题,我之前用AVR的时候,用的ICCAVR编译软件,配置不对的时候,一到延时函数就卡死。。。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝