帮忙看一下NEC单片机的这段程序是不是有问题?
用的是UPD78F9202芯片,P2和P4口接LED,1秒钟闪烁一次,为什么P2口的LED闪烁,而P4口的不闪?/*uPD78F9202*/
#pragma sfr
#pragma DI
#pragma EI
#pragma NOP
#pragma interrupt INTTMH1 int_TMH1
#pragma section @@CNST OPT AT 80H
const char OPTION=0b10010110; /* reset脚设定为输入口,内部8m高速振荡*/
#define OFF 0
#define ON 1
#define _5MS 5
#define _500MS 100
bit bSendEn;
unsigned char n5msCount;
unsigned char n500msCount;
unsigned char nOutData;
unsigned char nP4Buff;
void int_TMH1(void);
void hard_ini(void);
/*********************************************************/
void hard_ini(void)
{
PPCC=0b00000001; /*Fcpu=4M,Fxp=4M,(指令周期2/4=0.5us)*/
PCC=0b00000000; /**/
WDTM=0b01111000; /*看门狗关,0b01111000*/
/*IO初始化*/
PU2=0;
PU3=0;
PU4=0;
PM2=0b11110000; /*p20-p23输出*/
PMC2=0b00000000; /*p20-p23为端口/复用模式,非ADC模式*/
PM3=0b11111011; /*p34输入p32输出*/
PM4=0b11110110; /*p43 p40输出*/
P4=0b00000000;
nP4Buff=0;
/*8位定时器H1初始化*/
TMHMD1=0b00100000; /*H1模式设定:计数时钟=Fxp/16=4/16=0.25M=4us*/
CMP01=249; /*比较寄存器01设定:(249+1)*4us=1ms产生一次中断*/
TMMKH1=0; /*CMP01中断允许*//**/
TMHE1=1; /*启动定时器工作*//**/
}
/****************************************************/
void int_TMH1(void) //H1中断,1ms一次
{
TMIFH1=0;
if (!(n5msCount-=1))
{
n5msCount=_5MS;
if (!(n500msCount-=1))
{
n500msCount=_500MS;
P2.1=!P2.1;
P2.0=!P2.0;
P4.3=!P4.3;
P2.3=!P2.3;
P4.0=!P4.0;
}
}
}
void main()
{
DI();
hard_ini();
n5msCount=_5MS;
n500msCount=_500MS;
EI();
while(1)
{
NOP();
}
} 你烧录到单片机里面看看是否不闪?
因为我以前也碰过用软件仿真结果不对的情况。 软仿可以,关键就是烧到芯片里不闪。 这个问题要解决啊,幸亏是FLASH片子,否则这个软件仿真可会害死人的。。。 我用TM80时候也是碰到这个问题啊 郁闷啊 我用的是KOS系列的upd78f9202,楼上用的是ko系列的吧。
是不是与编译器的设置有关系?
编译器的这个选项如何设置?请NEC-etouch 帮忙解释一下。
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_392556.JPG
(原文件名:未命名.JPG) 你把P2口的程序去掉 看看 只是看p4
口 PU4=9; 【7楼】 cctnt :
PU4=9;意思是内部上拉电阻连接。
可是:设定为输出上拉电阻是不需要连接的,芯片内部电路也是自动关闭上拉电阻的。 再改
PM4=0b01100000; 【9楼】 cctnt:
我用得是78f9202.
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_395285.JPG
(原文件名:未命名.JPG)
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_395374.JPG
(原文件名:未命名.JPG) TO:
szxszx
你是说Using Fixed Area of ...
这个设置吧,
这个设置是指选用不同的起始文件,如果在KOS核中,建议你在这里不打勾,否则程序没有写多少,系统就会报错。 同样的电路板,跑下面的程序P4口就又输出,为什么?
#pragma sfr
#pragma section @@CNST OPT AT 80H
const char OPTION=0x96;//10011110
void delay(unsigned int i)
{
while(i>0)
{
i--;
}
}
void main()
{
WDTM=0x78;
PM2=0xf0;
PM4=0xf6;
P2=0x0;
P4=0x0;
while(1)
{
P4.0=1;
P4.3=1;
delay(2000);
P4.0=0;
P4.3=0;
delay(2000);
}
} 你取反是这样取的???
P2.1=!P2.1;
P2.0=!P2.0;
P4.3=!P4.3;
P2.3=!P2.3;
P4.0=!P4.0;
是不是弄错了,这个感叹号起什么作用啊???想取反可以用异或或都非啊,"^"或"~" 同样的操作方式,为何P2有输出,P4无输出?
怀疑是开发软件装的有问题,哪位帮忙把下面的程序编译一下,生成.HEX文件,我烧到芯片试一下。芯片型号:upd78f9202。
/*uPD78F9202*/
#pragma sfr
#pragma DI
#pragma EI
#pragma NOP
#pragma interrupt INTTMH1 int_TMH1
#pragma section @@CNST OPT AT 80H
const char OPTION=0b10010110; /* reset脚设定为输入口,内部8m高速振荡*/
#define OFF 0
#define ON 1
#define _5MS 5
#define _500MS 100
bit bSendEn;
unsigned char n5msCount;
unsigned char n500msCount;
unsigned char nOutData;
unsigned char nP4Buff;
void int_TMH1(void);
void hard_ini(void);
/*********************************************************/
void hard_ini(void)
{
PPCC=0b00000001; /*Fcpu=4M,Fxp=4M,(指令周期2/4=0.5us)*/
PCC=0b00000000; /**/
WDTM=0b01111000; /*看门狗关,0b01111000*/
/*IO初始化*/
PU2=0;
PU3=0;
PU4=0;
PM2=0b11110000; /*p20-p23输出*/
PMC2=0b00000000; /*p20-p23为端口/复用模式,非ADC模式*/
PM3=0b11111011; /*p34输入p32输出*/
PM4=0b11110110; /*p43 p40输出*/
P4=0b00000000;
nP4Buff=0;
/*8位定时器H1初始化*/
TMHMD1=0b00100000; /*H1模式设定:计数时钟=Fxp/16=4/16=0.25M=4us*/
CMP01=249; /*比较寄存器01设定:(249+1)*4us=1ms产生一次中断*/
TMMKH1=0; /*CMP01中断允许*//**/
TMHE1=1; /*启动定时器工作*//**/
}
/****************************************************/
void int_TMH1(void) //H1中断,1ms一次
{
TMIFH1=0;
if (!(n5msCount-=1))
{
n5msCount=_5MS;
if (!(n500msCount-=1))
{
n500msCount=_500MS;
P2.1=!P2.1;
P2.0=!P2.0;
P4.3=!P4.3;
P2.3=!P2.3;
P4.0=!P4.0;
}
}
}
void main()
{
DI();
hard_ini();
n5msCount=_5MS;
n500msCount=_500MS;
EI();
while(1)
{
NOP();
}
} NEC-etouch:
PM+是否支持K0S系列? 支持的,
NEC的软件稍微繁琐一点,安装的时候要分别安装KOS和K0的编译软件。
但是使用的时候就不需要注意这些东西了,PM+会根据你选用的芯片而自动选择所需要的编译器 NEC-etouch,请帮忙,目前问题一直没有解决,项目进度需要已经暂时更换为microchip的mcv08a芯片,以暂时解决燃眉之急。今天又查看了一下c编译器产生的汇编代码,发现有些指令没有编译产生?
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_417963.JPG
(原文件名:未命名.JPG)
PMC2未编译问题不大,因为芯片复位后该寄存器为00H,程序初始化也为00H;
而PM4就有问题了,芯片复位后该寄存器值为FFH,即默认为输入,这样程序就无法控制P4口输出高低电平了。
本贴被 szxszx 编辑过,最后修改时间:2008-09-15,10:04:41. 软件模拟仿真中也没有P4口的选项?
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_417987.JPG
(原文件名:未命名.JPG) ok,问题已经解决, PM4初始化放在前面即可。好像没看到资料里有介绍,郁闷!
/*IO初始化*/
PM4=0b00000000;//11110110; /*p43 p40输出*/
P2=0;
P3=0;
P4=0;
PM2=0b11110000; /*p20-p23输出*/
PMC2=0b00000000; /*p20-p23为端口/复用模式,非ADC模式*/
PM3=0b11111011; /*p34输入p32输出*/
// PM4=0b00000000;//11110110; /*p43 p40输出*/ 经过多次试验,发现是编译器的问题,去掉程序中的中文注释,就能够正常编译,看来编译器对中文注释支持不是很好,目前没发现对英文注释有何问题,大家使用时要注意这一点。我用的是UltraEdit编辑器。 TO szxszx
为什么我的中文注释有时候可以有时候乱码呢?
PM3=0b11111011; /*p34输入p32输出*/
不知你是怎么解决的?我也用的UltraEdit编辑器 NEC的PM+对中文的支持的确不好,所以我们一直不鼓励用中文支持
TO anxiangbo
你出现乱码的原因可能是:
你用UE编写了代码后,可能又在PM+的编辑器中修改过代码,这就会产生乱码 对,不要再PM+中修改保存,有问题直接用UltraEdit编辑器操作。 NEC-etouch:
1、【18楼】中提到的问题如何解决?
2、下图中的这个选项是干什么的?好像是用来“指定源文件中注释使用的汉字编码类型的”,怎么使用?
http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_419603.JPG
(原文件名:未命名.JPG) szxszx
你好
第一个问题:
这个软件仿真有着不理想的地方,的确没有P4口的IO口仿真
第二个问题:
Specifies the kanji code (2-byte code) in the source files.
sjis Shift JIS (Default for PC-9800 Series, IBM PC/AT compatibles, and HP9000 Series 700)
euc EUC (Default for SPARCstation)
none No 2-byte codes
这个东西我没有去研究,个人理解:这是为了NEC软件为了支持日文的一个设置选项,1个日文汉字也是由2个字节构成。
SJIS和EUC分别是针对不同的电脑类型而对应的配置。
根据经验:如果你的程序里面没有出现中文注释,这三个选项都不会对你程序编译有问题,如果你的程序里面有中文注释用SJIS这个选项,可能就会编译不了。
希望有懂得人来指导一下 手册中对于PM4,设置的时候,PM4要先写0,在手册中55页有的,注:。。。。。。 http://www.ourdev.cn/bbs/emotion/em150.gif 楼上东张西望的什么意思? 很有帮助的一帖,正在初学NEC的芯片,谢谢各位!!!
页:
[1]