stc89c52在keil中用C编程,写入 P1=0; 后程序运行结果就有错误,去掉P1=0;后就正常了,为什么?
不定义的话,编译器是看不懂P1^0是什么东西的
打开reg52.h头文件,可以看到
/* P3 */
sbit RD = P3^7;
sbit WR = P3^6;
sbit T1 = P3^5;
sbit T0 = P3^4;
sbit INT1 = P3^3;
sbit INT0 = P3^2;
sbit TXD = P3^1;
sbit RXD = P3^0;
同样你要是喜欢的话,把其他管教都定义上
比如
/* P3 */
sbit P10 = P1^0;
sbit P11 = P1^1;
sbit P12 = P1^2;
sbit P13 = P1^3;
sbit P14 = P1^4;
sbit P15 = P1^5;
sbit P16 = P1^6;
sbit P17 = P1^7;
然后保存头文件 myHeader.h
以后别添加reg52.h
直接添加myHeader.h
当然先把该头文件引入到工程了,方法和引入c文件是一样的
方法一:51单片机是指符合51架构的系列单片机,Keil编程时,即使没有STC等国产芯片的单片机型号,可直接选用Intel系列某款单片机,编程时,自己注意下STC的实际引脚IO口等的功能即可。
方法二:同时,可以以到STC网站上下载头文件,双击安装到Keil中,编程时就可以选择STC的各个型号芯片了。
{
init_source();
speed_set(0,7);
}
这种写法会让单片机反复执行这两句,也就是会不断的初始化.
建议写成这种结构
void main()
{
初始化代码();
while(1)
{
speed_set(0,7);
}
}
PS:P1 = 0;写法是正确的.
因为P1不认得十进制,要用十六进制赋值。比如要想把0送到P1口,应该这样写P1=0x00;你上面的意思是p1口低电平有效,要想把端口清零从零开始,就要把P1口全部变为高电平,即P1的8个脚二六进制为11111111,十六进制就应该是0xff。
求89c52单片机实现数字钟的汇编语言程序
S_SET BIT P3.2 ;数字钟秒控制位 M_SET BIT P3.3 ;分钟控制位 H_SET BIT P3.4 ;小时控制位 SECOND EQU 30H MINUTE EQU 31H HOUR EQU 32H TCNT EQU 34H ORG 0000H SJMP START ORG 000BH LJMP INT_T0 START:MOV DPTR,#TABLE MOV P1,#0FEH...
STC 89C52RC单片机向TXD端口发送指定数据的程序要怎么写
(2) 波特率不加倍(SMOD=0):Max_Baud = FOSC\/12\/32 例如:22.1184MHz晶振,波特率加倍时,最大波特率=22118400\/12\/16=115200#define FOSC11059200\/\/振荡频率 define BAUD9600\/\/波特率 define SMOD1\/\/是否波特率加倍 if SMOD define TC_VAL(256-FOSC\/16\/12\/BAUD)else define TC_VAL(256-FOSC\/...
求单片机C语言时钟程序~~~
if(tcnt==244){tcnt=0; second++; if(second==60) {second=0; minite++; if(minite==60) {minite=0; hour++; if(hour==24) {hour=0; } } } dispbuf[4]=second%10; \/\/得秒钟的低位,送缓冲数组 dispbuf[5]=second\/10; \/\/得秒钟的高位,送...
51单片机红外解码C程序
Tc=TH0*256+TL0; ...
60s倒计时程序和计数器1~60怎么写啊,求程序 89c52单片机
08H DB 0F6H ;"9" 09H DB 0EEH ;"A" 0AH DB 3EH ;"B" 0BH DB 9CH ;"C" 0CH DB 7AH ;"D" 0DH DB 9EH ;"E" 0EH DB 8EH ;"F" 0FH DB 00H ;" " 10H; DB 3FH,06H,5BH,4FH,66H ;12345; DB 6DH,7DH,...
经些青禾: RAM不够明显是你在RAM使用中太大手大脚了,52差不多有200字节可以使用,应该能满足大部分项目的要求了.你看看是不是全局数组开太多了,建议你开个数组后,尽量用指针.变量能用局部的就不要开全局. 另外,这两个芯片是兼容的,RAM大小也一样.
鄞州区17740002311: 用KEIL编写C语言代码,编译过后会出现形如:Program Size: data=13.0 xdata=0 code=417 - ?
经些青禾: data表示你使用的内部RAM,也就是地址在0~255之间的,用mov命令访问的RAM;xdata表示你使用的外部RAM,也就是需要用汇编movx才能访问的RAM,注意,很多扩展了RAM的51芯片,例如STC,华邦出品的51,虽然从使用者角度觉得是芯片自带的RAM,但实际上访问这些扩展RAM时是作为外部RAM处理的,你必须定义成xdata;code表示编译出来的程序大小,一般情况下就是程序占用的大小.如果你指定了CPU型号,如果code超出,KEIL链接的时候会报错的.
鄞州区17740002311: stc89c52在keil中用C编程,写入 P1=0; 后程序运行结果就有错误,去掉P1=0;后就正常了,为什么??
经些青禾: void main(){ init_source();speed_set(0,7);}这种写法会让单片机反复执行这两句,也就是会不断的初始化.建议写成这种结构void main(){ 初始化代码();while(1){speed_set(0,7); }}PS:P1 = 0;写法是正确的.
鄞州区17740002311: 在Keil中,用AT89C52芯片编程正确的C语言程序为什么下载到STC89系列单片机中显示不 - ?
经些青禾: 内部有一点点不一样.你要选择stc89系列的".H"文件,这个是内部定义IO口等等寄存器的文件.具体哪个地方不一样,我也忘了.另外,STC89系列的有专门的串口下载器软件.你可以去宏晶网站上下.注意下载时,软件上选择外部晶振.proteus作为自己入门训练时可以用,后续你懂多了,应该用的机会不大.电子电路东西,实际的电路最好,因为有很多问题需要解决,proteus太理想了 .
鄞州区17740002311: STC89C52在Keil C51中找不到芯片组啊 - ?
经些青禾: 我来回答你的问题吧: 在KEIL中,选择芯片的时候,是不能选STC系列的.不过,对于STC的任何一个系列,你都可以选择AT89S52系列.STC系列兼容51系列的单片机,也就是说,51系列的单片机有的功能STC一般都有.在书写程序的时候...
鄞州区17740002311: 我的单片机是STC89C52,请问我在KEIL中建新工程时,选择AT89C52可以吗? - ?
经些青禾: STC89C52 完全兼容AT89C52(郭天祥这么说的)至于程序的警告,应该是你申明了一个函数'Initial_DS1302',但是后面却没有调用它你可以把这段申明给删掉,应该就可以了!不过警告一般不影响结果的~ creating hex fiel from "Design"... 说明已经生成了HEX文件了,烧进芯片里看看~
鄞州区17740002311: 【求单片机C语言程序】STC89C52通过两个外部中断P3.2和P3.3,来控制P1.0和P1.1的数码管亮和灭,一定keil C - ?
经些青禾: /*模块低电平有效、外部中断0、1为低电平出发*/#include "reg52.h" void delay( char i) { unsigned char t; while(i--) { for(t=0;t<108;t++); } } void INT0_ROUTING() interrupt 0//外部中断0子程序 { P0=0xfe;//LED0点亮 while((P3|0xfb)==0xff);//等待外部...
鄞州区17740002311: (1/3)求,如何用Keil软件编写一个在STC89C52单片机上运行的有声的倒计时程序?要求:1.时间可以自己设... - ?
经些青禾: 首先在KEIL窗口中找到一个小榔头一样的图标叫做Options of Target,点击它,跳出一个窗口.在这个窗口中写入你的单片机所使用晶振的频率,然后在OUTPut那个选项页中将“Creat Hex”打钩选中.这样你再编译程序(编译按键就在小榔头...
鄞州区17740002311: keil4编辑的stc89c52的程序可以给芯片stc89c51rc使用么,用不用修改 - ?
经些青禾: 如果flash跟eeprom够用的话,是直接换的
鄞州区17740002311: 刚学单片机我只会STC89C58的IC去用C语言编但换了别的IC我不会了不同的单片机头件那里来的呀? - ?
经些青禾: 这啊,要你自己定义,STC的头文件KEIL里面没有,你可以去宏晶网上面下载,再拷贝到你的STC的头文件里面去就OK了