打印

PIC按键仿真模拟出错

[复制链接]
1889|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhbwgh|  楼主 | 2008-4-13 21:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PIC按键我用软键模拟的时候,程序能够按步直接运行,可是用仿真器的时候,程序并不是按步运行的,

#include "pic.h"
#define KEY RB5
unsigned char judge_a_s;
unsigned char key_value;
unsigned char display_data[30];
void key(void)
{
    PORTB=0xe1;
    if(KEY!=1)
    {
        delay();
        while(KEY!=1);
        judge_a_s=1;
    }
    PORTB=0xe2;
    if(KEY!=1)
    {
        delay();
        while(KEY!=1);
        judge_a_s=2;
    PORTB=0xe3;
    if(KEY!=1)
    {
        delay();
        while(KEY!=1);
        key_value++;
        if(key_value>4)
            key_value=0;
    }    
}

void main(void)
{
    TRISB=0xe0;//1110 0000
    while(1)
    {
    key();
    if(judge_a_s==1)
    {
        switch(key_value)//从这里开始跳转
        {
            case 0:display_data[25]++;break;
             case 1:display_data[26]++;break;
            case 2:display_data[27]++;break;
            case 3:display_data[28]++;break;
            default:break;
        }
        for(i=25;i=28;i++)
        {
            if(display_data>9)
                display_data=0;
            if(display_data<0)
                display_data=9;
            dis_one(display_data,key_value);
        }
    }
    }
}

void dis_one(unsigned char display_data,unsigned char display_bit)
{
    unsigned char display_tran_data;
    unsigned char i;
    switch(display_data)
    {
        case 0:display_tran_data=0xef;break;//此处数据随意
        case 1:display_tran_data=0x60;break;
        default:break;
    }
    PORTB=0x1f;
    for(i=8;i!=0;i--)
    {
        LS164=display_tran_data&0x01;//直接跳转到这里
        CLK164=0;
        display_tran_data<<=1;
        CLK164=1;
    }
    PORTB=display_bit;
}
沙发
zhbwgh|  楼主 | 2008-4-14 12:12 | 只看该作者

回复

    我看过汇编的程序,是程序 装入地址的时候装错了。本来该装入switch中的case的地址,结果装入了LS164的地址,可是在软件模拟的时候,地址装入就是对的,请教一下,这是为什么啊?
    我用的PIC16F873A, 仿真MCD2。

使用特权

评论回复
板凳
兰天白云| | 2008-4-14 18:44 | 只看该作者

看不大明白

本来该装入switch中的case的地址,结果装入了LS164的地址

你是指void dis_one(unsigned char display_data,unsigned char display_bit)
错吗?

使用特权

评论回复
地板
zhbwgh|  楼主 | 2008-4-14 21:40 | 只看该作者

回复

    程序在这里就跑乱了,单独的函数没有错误的,找到一个问题,我没有使能内部的弱上拉,改正之后在单步运行的时候,程序是可以显示的,但是连续运行时,显示是错误的,我感觉是 查询按键的时候 造成164的时钟线不稳定造成的,谢谢了,终于有人回了,呵呵

使用特权

评论回复
5
zhbwgh|  楼主 | 2008-4-15 10:08 | 只看该作者

按键值读不到

现在显示正常,可是检测不到按键按下,RB5口没有反应,一直为高,去掉显示也不行,请问这是哪里的问题?

#include "pic.h"

#define key RB5

void main(void)

{

        signed char i;

       TRISB=0xa0;

       RBPU=0;

       while(1)

      {

             PORTB&=0xf1;//低四位置1,检测RB5的状态

             if(key==0)

             {

                     delay();//延时函数未写,延时30ms

                     if(key==0)

                     {

                              while(key==0);

                             i++;

                     }

             }

      }

}

使用特权

评论回复
6
zhbwgh|  楼主 | 2008-4-18 22:50 | 只看该作者

回复

问题已解决,多谢三楼了,现在很少人回帖啊 ,呵呵

使用特权

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

本版积分规则

17

主题

51

帖子

0

粉丝