打印
[51单片机]

Keil C 51程序变量值保存问题

[复制链接]
617|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
softwbc|  楼主 | 2019-10-14 00:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
static uint ServoControl = 0; 或 uint ServoControl = 0; // 定义一个全局量 保存串口中断函数中赋的值 0或1
// 但是ServoControl 无法保留上次的值。
比如:发送0xFF设为1,再发一个0x02 发现ServoControl是0
void Com() interrupt 4      //串口中断
{
        uint Pwmvalue=0;
        if(RI)
        {
                RI=0;
                Pwmvalue=SBUF;
                if(Pwmvalue==0x00)
                {
                        ServoControl=0;       
                        P0=0x00; // 接LED灯测试用的
                }
                if(Pwmvalue==0xFF)
                {
                        ServoControl=1;
                        P0=0xFF;                               
                }
                if(ServoControl==1)
                {
                        P1=0x00;
                }
                if(ServoControl==0)
                {
                        P1=0xFF;
                }
        }       
}

使用特权

评论回复

相关帖子

沙发
ayb_ice| | 2019-10-14 11:46 | 只看该作者
指令没执行正确吧

使用特权

评论回复
板凳
softwbc|  楼主 | 2019-10-14 18:47 | 只看该作者
ayb_ice 发表于 2019-10-14 11:46
指令没执行正确吧

一开始也怀疑没执行,所以每个if里面加了一句LED灯的控制
确实执行了,
郁闷啊

使用特权

评论回复
地板
ayb_ice| | 2019-10-15 08:26 | 只看该作者
softwbc 发表于 2019-10-14 18:47
一开始也怀疑没执行,所以每个if里面加了一句LED灯的控制
确实执行了,
郁闷啊 ...

ServoControl不应该定义为uchar吗,ServoControl也应该定义uchar

另外ServoControl值在其它地方有改变吧

if(Pwmvalue==0xFF)
                {
                        ServoControl=1;
                        P0=0xFF;                                
                }
                if(ServoControl==1)
                {
                        P1=0x00;
                }
这个代码也有问题吧,P0先等于FF后又等于00
if(ServoControl==1)
                {
                        P1=0x00;
                }
                if(ServoControl==0)
                {
                        P1=0xFF;
                }
这段代码应该在主循环执行吧,

使用特权

评论回复
5
softwbc|  楼主 | 2019-10-15 09:41 | 只看该作者
ayb_ice 发表于 2019-10-15 08:26
ServoControl不应该定义为uchar吗,ServoControl也应该定义uchar

另外ServoControl值在其它地方有改变吧 ...

多谢大神啦,我昨天晚上折腾了一晚上搞清楚了。确实是因为数据类型问题!
还有这个方法是在串口中断里面的,我对串口工作方式理解有问题,数据按位发,每次都会执行中断函数是吧?
单就这个变量问题:把ServoControl定义成uchar,然后复制的0、1数字加上单引号 就好了;
没对上需求(已改成加了个函数,接收字符串方式),但是问题找到了,也算没白折腾!

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝