OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4931|回复: 3

STC单片机定时器中断函数,求助

[复制链接]

1

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2019-9-13
在线时间
8 小时
发表于 2019-9-30 19:27:33 | 显示全部楼层 |阅读模式
10金钱
用hx711和STC8a8k单片机,做一个称重,我并不是要做电子秤,就自己写了一个程序,写完了以后调试了一整天,但就是用不了,请求各位大神帮我看看,这个程序哪里问题,这些乱码在keil上好像是可以重新显示出字,


/*******ÔúêyÂë1üéÏÏÔê¾,óÃcd4511Çy¶ˉ12òõêyÂë1ü*******/


#include<stc8.h>
#define u8 unsigned char
#define u16 unsigned int
         


sbit scl=P1^0;                        //hx711á&#189;&#184;&#246;&#182;&#203;&#191;úμ&#196;&#182;¨ò&#229;
sbit sda=P1^1;




sbit DUAN5=P0^5;                //êy&#194;&#235;1ü&#182;&#206;&#209;&#161;&#182;¨ò&#229;
sbit DUAN4=P0^4;
sbit DUAN3=P0^3;
sbit DUAN2=P0^2;
sbit DUAN1=P0^1;
sbit DUAN0=P0^0;


void Init_Timer0();                                                                                //&#182;¨ê±&#198;÷03&#245;ê&#188;&#187;ˉ
unsigned long HX711_Read(void);                                //&#182;á′&#171;&#184;D&#198;÷êy&#190;Y
void xianshi(u16 ,u16 );                                                        //&#212;úêy&#194;&#235;1üé&#207;&#207;&#212;ê&#190;,ó&#195;cd4511
void delay(u16);                                                                                        //á&#189;&#184;&#246;&#209;óê±
void Delay10us();


u16 flag = 0;                                                                                                        //&#182;¨ê±&#198;÷±ê&#214;&#190;&#206;&#187;
unsigned int ds ;
u16 di[6];




void main(void)
{
       
        delay(300);
        Init_Timer0();
       
        while(1)
        {
                if(flag==500)
                {
                        ds = (unsigned int)((float)HX711_Read()/445); //&#188;&#198;&#203;&#227;&#214;&#216;á&#191;
                        flag=0;
                }       
        /**&#161;&#161;2e·&#214;ó&#195;óúêy&#194;&#235;1ü&#207;&#212;ê&#190;**/
               
                di[5]=ds/100000;
                di[4]=ds/10000%10;
                di[3]=ds/1000%10;
                di[2]=ds/100%10;
                di[1]=ds/10%10;
                di[0]=ds%10;

               
                xianshi(di[5] ,5 );
                delay(2);
                xianshi(di[4] ,4 );
                delay(2);
                xianshi(di[3] ,3 );
                delay(2);
                xianshi(di[2] ,2 );
                delay(2);
                xianshi(di[1] ,1 );
                delay(2);
                xianshi(di[0] ,0 );
                delay(2);


               


               
        }               


}


void Init_Timer0()
{
        AUXR |= 0x80;               
        TMOD &= 0xF0;               
        TMOD |= 0x01;               
        TL0 = 0xcd;                //1ms       
        TH0 = 0xd4;
        TF0 = 0;
        ET0 = 1;                            //&#191;a&#198;&#244;&#182;¨ê±&#198;÷&#214;D&#182;&#207;
        EA = 1;                                        //&#191;a&#198;&#244;×ü&#214;D&#182;&#207;       
        TR0 = 1;
}


void Timer0() interrupt 1
{


        TL0 = 0xcd;               
        TH0 = 0xd4;
        flag++;


}


unsigned long HX711_Read(void)        //&#212;&#246;ò&#230;128
{
        unsigned long count;
        unsigned char i;
          sda=1;
        Delay10us();
          scl=0;
          count=0;
        EA = 1;
          while(sda);
        EA = 0;
          for(i=0;i<24;i++)
        {
                  scl=1;
                  count=count<<1;
                scl=0;
                  if(sda)
                        count++;
        }
        scl=1;
    count=count^0x800000;//μú25&#184;&#246;&#194;&#246;3&#229;&#207;&#194;&#189;μ&#209;&#216;à′ê±£&#172;×a&#187;&#187;êy&#190;Y
        Delay10us();
        scl=0;  
        return(count);
}


void Delay10us()               
{
        unsigned char i;


       
        i = 25;
        while (--i);
}


void delay(u16 a)
{
        u16 i, j;


       
        for(i=0;i<a;i++)
                {
                        for(j=1000;j>0;j--);
                }
}


void xianshi(u16 dat,u16 duan)
{
               
                DUAN0=1;
                DUAN5=1;
                DUAN4=1;
                DUAN3=1;
                DUAN2=1;
                DUAN1=1;
               
         switch (duan)
                {
                        case 0:
                                        DUAN0=0;
                                        P2=dat;
                                        break;
                        case 1:
                                        DUAN1=0;
                                        P2=dat;
                                        break;
                        case 2:
                                        DUAN2=0;
                                        P2=dat;
                                        break;
                        case 3:
                                        DUAN3=0;
                                        P2=dat;
                                        break;
                        case 4:
                                        DUAN4=0;
                                        P2=dat;
                                        break;
                        case 5:
                                        DUAN5=0;
                                        P2=dat;
                                        break;
                }


}


最佳答案

查看完整内容[请看2#楼]

查询了很久,原来是中断函数出来的问题,问题已解决,
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2019-9-13
在线时间
8 小时
 楼主| 发表于 2019-9-30 19:27:34 | 显示全部楼层
查询了很久,原来是中断函数出来的问题,问题已解决,
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2019-10-4 01:12:20 | 显示全部楼层
帮顶
回复

使用道具 举报

5

主题

129

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
432
金钱
432
注册时间
2020-5-8
在线时间
66 小时
发表于 2020-10-9 18:48:13 | 显示全部楼层
中断有什么问题?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 06:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表