
这就要看你想初始化为高电平有效还是低电平有效,只要在数值里面反一下就可以了,即0变1或1变0,不懂你是学汇编语言还是C语言,我举个例子你看看吧。
ORG 100H ;单片机起始地址
MOV A,31H ;分配存储空间
M0:MOV A,#0EFH ;P2口赋初值( 即P2口管脚初始化)
MOV R0,#08H ;循环次数
M1:MOV P2,A ;给P2口赋值,从而点亮LED
LCALL DELAY ;LED点亮延迟时间
LCALL DELAY
LCALL DELAY
RR A ;LED右移循环显示
DJNZ R0,M1 ;循环结构语句
JMP M0
DELAY: MOV R6,#0FFH ;延迟时间设定
DL1: MOV R7,#0F0H
DJNZ R7,$
DJNZ R6,DL1
RET
END
只用来下程序,你的程序中不用串口就不需要初始化。凡是能够用串口下载程序的单片机,内部都有自举程序,这个程序是隐藏的,不占用用户程序空间,在自举程序中会对串口初始化,但一旦脱离自举程序把权限交给用户,进行了一次类似手机恢复出厂设置的动作,你程序中再次使用串口时还是得初始化。
RS BIT P25
RW BIT P26
E BIT P27
WRCMD EQU 30H
TIME EQU 31H
ORG 0000H
AJMP MAIN
ORG 0040H
MAIN: MOV P0,#01H ;清除屏幕
CALL ENABLE ;写到指定寄存器
MOV P0,#38H ;功能设定(8位,2行,57点阵式)
CALL ENABLE ;写到指定寄存器
MOV P0,#0CH ;显示器ON,光标OFF,闪烁OFF
CALL ENABLE ;写到指定寄存器
MOV P0,#80H ;第一行起始地址
CALL ENABLE ;写到指定寄存器
MOV DPTR,#TABLE1
CALL WRITE1 ;到TABLE1取码并写到数据寄存器
CALL DISPLAY
AJMP $
DISPLAY: MOV P0,#0C0H
CALL ENABLE
MOV DPTR,#TABLE2
CALL WRITE3
RET
ENABLE: CLR RS ;RS=0,写到旨令寄存器
CLR RW ;R/W=0
CLR E ;E=1--0使能
CALL DELAY ;调用延时子程序
SETB E ;E=1禁止
RET
WRITE1: MOV R1,#00H ;取码指针
A1: MOV A,R1 ;到TABLE取码
MOVC A,@A+DPTR
CALL WRITE2 ;调用写入到数据寄存器子程序
INC R1 ;取码指针加1
CJNE A,#00H,A1 ;是否取到结束码00H
RET
WRITE3:
MOV R1,#0 ;从左至右显示
A2: MOV A,R1
MOVC A,@A+DPTR
CALL WRITE2
INC R1
CJNE A,#00H,A2
RET
WRITE2: MOV P0,A ;将数据码写入数据寄存器
SETB RS ;RS=1
CLR RW ;R/W=0
CLR E ;E=1--0 使能
CALL DELAY
SETB E ;E=1 禁止
RET
DELAY: MOV R4,#05 ;延时子程序
D1: MOV R5,#0FFH
DJNZ R5,$
DJNZ R4,D1
RET
TABLE1: DB 'Temperature is :',00H
TABLE2: DB '3~9',00H
END
能实现你所要求的功能的51单片机的C语言程序是:
#include<reg51h>
void main(void)
{
while(1);
}
这是最简单的,就是51单片机上电啥都不干直接进入死循环就行了。因为51单片机的各个IO口上电就是高电平。它自己就默认置1了。
如果硬要写清楚那就是:
#include<reg51h>
void main(void)
{
P0 = 0xFF;
P1 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
while(1);
}
这样单片机的32个IO口肯定全部置一了(那四句赋值语句简直多此一举)。
以上就是关于51单片机 管脚 初始化全部的内容,包括:51单片机 管脚 初始化、51单片机中串口如果只用来下载程序程序,还要初始化吗、51单片机驱动1602初始化问题(汇编)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)