打印

调试89s52小系统的一些问题

[复制链接]
1796|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sdhz|  楼主 | 2007-10-25 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用的是wh-280编译器,开发环境keil51

问题一:
无法对位进行置位和清零,
简单的
#include<reg52.h>
sbit ab=P1^1
void main(void)
{
while(1)
{ab=0;
ab=1;}
}
在硬件上无法检测到电平变化。
但是下面对P1P2P3直接设置的时候则可以
#include <intrins.h>
#include<stdio.h>
#include<absacc.h>
#include<at89x52.h>
#define LCD_Data P1

typedef    unsigned char uchar;
uchar i,a;


void    Time0Init(void)
{
    TMOD=0x06;
    TL0=0x30;TH0=0x2a;
    EA=1;
    ET0=1;
    TR0=1;
}
void    Time0_Int(void) interrupt 1
{
//    adc0809(ad);
    i++;
    if(P1==0xaa){P1=0x55;}
    else P1=0xaa;
//    if(ad[1]>0xa529){ET0=0;}

}
void    main()
{
    a=0;
    Time0Init();
    P1=0xaa;
    while(1)
    {   
        P3=0x55;
        P2=0x55;
        P3=0xaa;
        P2=0xaa;
    }
}

相关帖子

沙发
sdhz|  楼主 | 2007-10-25 12:01 | 只看该作者

各位前辈帮忙分析一下吧

是不是89s52在按位输出的时候要做某些设置

使用特权

评论回复
板凳
sdhz|  楼主 | 2007-10-25 12:03 | 只看该作者

P3口的特殊功能一般是通过什么来启动?

中断寄存器的设置还是别的什么,startup.A51是用来干什么的,怎么修改?

使用特权

评论回复
地板
sdhz|  楼主 | 2007-10-25 12:04 | 只看该作者

对P2设是可以的,但是对P3设则没有反应

//#include<at89x52.h>
#include<intrins.h>
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint comm,dat1,dat2,dat3;
code uchar table[]="abcdefgh";
sbit rst=P3^4;
sbit rs=P3^1;
sbit rw=P3^7;
sbit e=P3^6;
void delay(uint time);
void xiezhiling(void);
void xiexianshi(void);
void xieddram(void);
void main(void)
{ uchar i;

P2=0x00;//rst=0;
_nop_();
_nop_();
_nop_();
P2=0xff;//rst=1;

while(1)
{
P2=0xb3;//P3|0x82;
//rs=1;
//rw=1;
P2=0xf1;//P3|0x40;//e=1;
P2=0x71;//P3&0x7d;//rs=0;rw=0;
P2=0x31;//P3&0xbf;//e=0;
comm=0x30;
xiezhiling();
comm=0x0c;
xiezhiling();
comm=0x01;
xiezhiling();
comm=0x02;
xiezhiling();

comm=0x80;
dat2=0x00;
xieddram();
delay(10000);

comm=0x90;
xiezhiling();
for(i=0;i<8;i++)
{ dat1=table;
   xiexianshi();
   delay(10000);
}
//while(1)
//{;
}
}
void delay(uint time)
{ uint i;
for(i=0;i<time;i++);
}
void xiezhiling(void)

P2=0x31;//P3&0x7d;//rs=0;rw=0;
P1=comm;
_nop_();
_nop_();
_nop_();
P2=0x71;//P3|0x40;//e=1;
_nop_();
_nop_();
_nop_();
P2=0x31;//P3&0xbf;//e=0;
}
void xiexianshi(void)

P2=0x33;//P3=P3|0x02;P3=P3&0x7f;//rs=1;rw=0;
P1=dat1;
_nop_();
_nop_();
_nop_();
P2=0x73;//P3|0x40;//e=1;
_nop_();
_nop_();
_nop_();
P2=0x33;//P3&0xbf;//e=0;
}
void xieddram(void)
{ uchar i;
xiezhiling();
for(i=0;i<8;i++)
{ dat1=0;
   xiexianshi();
   dat1=dat2;
   xiexianshi();
}
}
 

使用特权

评论回复
5
ayb_ice| | 2007-10-25 14:03 | 只看该作者

sbit ab=P1^1后面怎么没有“;”

使用特权

评论回复
6
sdhz|  楼主 | 2007-10-25 15:02 | 只看该作者

回复5楼

这个应该不是主要问题,我试了中间加delay的程序了,也是没有上电 之后也是没有电平变化
在仿真的时候结果监测P1,P2,P3都是可以变化的
但是在小系统里就没有反应
问题二中以前也是按位来设置的,中间肯定是有变化时间的,但效果也是看不到P3口电平的变化

使用特权

评论回复
7
sdhz|  楼主 | 2007-10-25 15:03 | 只看该作者

回复6楼

;在程序里是有的,因为这个程序很短,我是敲上去的

使用特权

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

本版积分规则

11

主题

44

帖子

0

粉丝