找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2915|回复: 6
打印 上一主题 下一主题
收起左侧

单片机程序有错误 谢谢朋友的回复

[复制链接]
跳转到指定楼层
楼主
#include <reg52.h>

typedef unsigned char u8;
typedef unsigned short int u16;
typedef unsigned long int u32;

sbit RELAY = P1^4;  //定义继电器使用的IO口
sbit K1    = P0^0;  //定义按键使用的IO口

//定时器1重载值:10毫秒@11.0592MHz
#define TL1_ReloadValue 0x00
#define TH1_ReloadValue 0xDC
void Timer1Init(void)        
{
    AUXR &= 0xBF;        //定时器时钟12T模式
    TMOD &= 0x0F;        //设置定时器模式
    TMOD |= 0x10;        //设置定时器模式
    TL1 = TL1_ReloadValue;    //设置定时初值
    TH1 = TH1_ReloadValue;    //设置定时初值
    TF1 = 0;        //清除TF1标志
    TR1 = 1;        //定时器1开始计时/
}

void Timer1_Handler(void) interrupt 3 //定时器1中断服务程序
{
    //重装定时1:
    TL1 = TL1_ReloadValue;   
    TH1 = TH1_ReloadValue;
    TF1=0;//清除定时器1中断标记
    cnt10ms++;//累加1个10ms计数器,供主程序使用
}

void main()
{
    u8 step=0;//状态机
    Timer1Init();//10毫秒@11.0592MHz
    ET1=1;    //允许定时器1中断
    EA=1;     //允许总中断

    cnt10ms=0;//10ms计数器清零
    while(1)//大循环
    {
        //处理按键和继电器状态机:
        switch(step)
        {
            case 0://等待按键启动
            {
                if(K1 == 0)//如果按键按下,则启动一个继电器动作
                {
                    RELAY = 0; //打开继电器
                    cnt10ms=0;//10ms计数器清零
                    step = 1;//下一步:继电器动作,并保持设定的时间
                }
                else
                {
                    RELAY = 1; //关闭继电器
                }
                break;
            }
            case 1://继电器动作,并保持设定的时间
            {
                if(cnt10ms < (3600*100))//还没到1小时
                {
                    RELAY = 0; //打开继电器
                }
                else//超过1小时
                {
                    RELAY = 1; //关闭继电器
                    step = 0;//回到等待按键启动状态
                }
                break;
            }
            default://错误状态,只要硬件不出错,永远不会执行到这里
            {
                step = 0;//回到等待按键启动状态
                break;
            }
        }
    }
}

222.jpg (24.14 KB, 下载次数: 95)

222.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:97438 发表于 2016-6-11 02:45 | 只看该作者
第一没有定义auxr这个寄存器,把你用的单片机的头文件包含一下就可以解决
第二没有定义cnt10ns这个变量,定义一下就可以了
第三建议你先去看看c语言基础,不学好基础从错误中学习是效率很低的、
回复

使用道具 举报

板凳
ID:126397 发表于 2016-6-12 18:14 | 只看该作者
楼上正解,不要忘了添加头文件,不然会出现无定义
回复

使用道具 举报

地板
ID:126753 发表于 2016-6-14 21:48 | 只看该作者
楼上两位说的不错似乎没我说的了
回复

使用道具 举报

5#
ID:112184 发表于 2016-6-14 22:06 | 只看该作者
我来看看
回复

使用道具 举报

6#
ID:110895 发表于 2016-6-15 00:39 | 只看该作者
很低级的错误,最好仔细些。
回复

使用道具 举报

7#
ID:71099 发表于 2016-6-18 11:16 | 只看该作者
遇到这种错误可以上网搜索其错误代号,这样可以提高写程序的质量
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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