作业帮 > 综合 > 作业

C52单片机问题:本人是新手,现有一个问题,还望各位大神给以改正,题目已经给出.还有请问怎么调试它?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/22 06:52:41
C52单片机问题:本人是新手,现有一个问题,还望各位大神给以改正,题目已经给出.还有请问怎么调试它?
这个是我写的程序,很多错误请谅解:
本次制作为一个红外接收与发射,红外发射通过芯片555与其外围电路通过改变可调电阻R2(电路图上标注)的阻值而产生38k HZ的脉冲驱动红外发射管,红外接收管与单片机引脚连接(标号OUT),指示灯D3在红外接收管接收到红外光后变亮(注意:指示灯的闪烁并且发光暗为外部影响并非接收到红外光,当接收到红外时,红外管正常发光).由此大家可以调出38k HZ的红外光.在制作电路时建议红外管正对着接收管,并且距离最好为5-10cm.从而保证达到更好的效果.
红外发射管发出的红外光眼睛看不到,通过手机的照相机可以看到红外是否发光从而可以检测红外管的好坏,红外管很容易由于电压过高而烧坏,大家要注意,在这次实验器材里给大家提供三个红外发射管,以便大家在烧坏时换上,但是电路上只接一个红外管.红外接收管为集成接收管,型号为VS1838,要注意的是红外红外管未接收到时为高电平,接收到红外光后有一个低电平的脉冲,(就是不是持续低电平,接收到红外后引脚变为低电平一段时间后变为高电平,虽然这时还是能接收到红外光.因此大家看到红外管受收到红外后亮一会儿就灭掉,)红外接收管引脚与单片机的P3^2连接,方便检测时可选择外部中断检测.焊电路时要注意引脚的标号,标号相同接在一起,不要接错.
可调电阻R2的阻值大约为1200.
由于有很多同学不会编程,在附录里给出了基本的数码管显示函数.
本次比赛的要求:
基本要求:
1、电路布局合理,焊接美观.
2、红外发光管能正常发光,接收管能正常的接收到红外信号
,能消除外界的干扰.
3、数码管能实现对红外接收管接收到红外发光管发射的次数进
行显示 ,能够通过程序判 别并消除外界的干扰.\x05\x05\x05\x05
4、在接收到10次后蜂鸣器响,通过按键可以关掉蜂鸣器,通过
按键可以对计数值清零.
5、通过按键可以设定上下报警值,通过按键可以改变记数方式,
(就是通过按键可以实现当接收到红外光后记数值由加一变
为减一,由减一变为加一)当报警值到后蜂鸣器报警通过按
键可以关闭蜂鸣器.\x05\x05\x05\x05\x05
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#define uchar unsigned char//定义uchar为unsigned char型
#define uint unsigned int//定义uint为unsigned int型
sbit SPEAK=P3^6;\x05 //定义蜂鸣器,其中 sbit时位定义.就是使speak与P3^6一样
sbit IR=P3^2;\x05 //定义红外接收管输口为IR
sbit S1=P1^0; //定义按钮S1
sbit S2=P1^1; //定义按钮S2
sbit S3=P1^2; //定义按钮S3
sbit S4=P1^3; //定义按钮S4
uint j;\x05\x05//一个中间变量
uint m; //报警值
uchar const smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示表,分别代表0-9;其中4-9(0x**)由大家自己写出.
void delay(uint i);
void xianshi(uint j);
void dszd0();
void wbzd0();
void keyscan();
Init_Timer0();
void delay(uint i)\x05 //具体时间为延时的时间为 i*1us(us微秒)
{
\x05while(i--);
}
void Init_Timer0() //定时器初始化
{
\x05TMOD=0x01;
\x05TH0=0XD8;
\x05TL0=0XF0;
\x05ET0=1; //允许T0中断
\x05TR0=1; //开启T0中断
\x05EX0=1; //允许外部中断
\x05IT0=1; //边沿触发(高低电平的改变才能被接收)
\x05EA=1; //开启总中断
\x05j=0;
m=10;
}
看了半天没看出你的问题是什么……汗……
如果有什么运行不对的地方错误或者报错信息也应该贴出来呀.
调试嘛,和其他嵌入式调试一样啊,设置断点一步步运行,还有就是下载到单片机进行系统调试咯,用示波器和万用表查找错误,分析原因,再冲程序和电路上找问题.
祝顺利