为了保险一般需要先给送一个“高”,再读取IO口,这是针对那些没有加上拉电阻的IO口而采取的办法,如果加了上拉电阻,是不用这么麻烦的,可以直接读取IO口的值。
uncsigned char dat0,dat1;//
P0=0xff;P1=0xff;
dat0=P0;
dat1=P1;
keil5mdk怎么添加c51芯片 - : MDK是针对ARM7、ARM9、Cortex-M系列32位内核的微控制器/微处理器的,并没有针对51单片机的支持要在MDK中添加51单片机是无法实现、也没有意义的你的需求应该是想在同一个μVision IDE下面同时装MDK和C51两种工具链
你好,这是keilC51中的一个小程序,麻烦你看下啦,呵呵!问题 : 你是做嵌入式的Keil C51不怎么懂,不过C程序函数的调用本质上是将标号地址(指令地址)加载到CPU中运行,如果已经全局范围内存在其他标号为Init_Timer0的变量/
keil uvision5怎么打开c51 - : 如果已经安装了c51的keil 直接打开keil 会自动根据工程内容选择c51或arm的编译环境 不需要专门去打开c51
如何让Keil5可以打开Keil4的Project - :工具/原料 Keil5 MDK Core,MDK v4 Legacy Support 方法/步骤 首先是到Keil官网下载最新版本的MDK Core; 接着安装MDK Core,按照默认安装就可以;
keil5编译过51后不能编译32了是怎么回事 - : 建一个工程慢慢加其它函数,先加s文件,写一个空的main函数,编译一下,会报错,到s文件中把 ;IMPORT SystemInit ;LDR R0, =SystemInit ;BLX R0 这三行注释掉,再编译应该就没有错了,再一步步添加头文件路径和c文件,先添加一个正确了有感觉了就一次性添加,很简单
keil474怎么打开keil5的工程问题 - : 其实,打开工程没有多大用处最关键是要有C语言的源程序和有关的头文件有了这些,在keil474新建工程,在加载这些C程序和头文件就行了如果没有C程序文件和头文件,就是打开工程也没有用
我在keil平台编译好的HEX文件如何导入proteus - : 在proteus软件中双击51单片机芯片,然后就会出现导入界面请参照以下步骤1、首先在电脑上用proteus软件打开目标文件2、然后用鼠标左键双击51单片机图标,如图所示3、然后在出现的窗口中,点击下图中的文件夹图标4、然后在电脑文件夹中找到编译好的HEX文件导入5、完成以上设置后,即可将keil平台编译好的HEX文件导入到proteus软件中
怎么用keil5编译51的程序 - : 下载一个keil软件包,并安装打开keil,看到如图界面首先新建一个工程,选择project-new project,d出一个对话框,填写工程名,确定然后选择你所使用的芯片,型号,确定然后点击文件File—New,新建一个文件,确定5 之后我们就可以在编辑区写程序了,按照51指令集yongc语言比较好写
如果你想得到的是单片机里别人烧写进去的程序,这是几乎不可能的,你只能根据他的功能自己编写
如果你想吧别人写好的hex文件翻译成C语言或者汇编程序,这也几乎是不可能实现的。
就和win平台的exe程序一样,一旦封装好了,解开是很困难的,绅士解开比你自己写花费的精力还要多
关键看你如何控制,最简单的就是:
include<reg51h>sbit led1=P1^4;
sbit led2=P1^5;
sbit led3=P1^6;
sbit key1=P0^4;
sbit key2=P0^5;
sbit key3=P0^6;
main()
{
while(1)
{
led1=key1;
led2=key2;
led3=key3;
}
}
基于AT89S51单片机的数字温度测量及显示系统设计
程序
DI EQU P33
DO EQU P34
CLK EQU P35
CS EQU P36 ; LCD端口定义
D2RS EQU P27
D2RW EQU P26
D2E EQU P25
KEYPORT EQU P1 ; DS18B20端口定义
TEMPER_L EQU 36H
TEMPER_H EQU 35H
TEMPER_NUM EQU 38H
FLAG1 BIT 00H
DQ BIT P24
ORG 0000H
LJMP MAIN
ORG 0003H
JMP INT00
ORG 0038H
MAIN: MOV SP,#60H
SETB P20
SETB P21
SETB P22
SETB EA
SETB EX0
SETB P20
SEETB P21
SETB P22
MOV R0,#01H ;清屏并置地址计数器AC为0
LCALL DIS_CMD _WRT
MOV R0,#38H ;8位数据接口,双行显示,57点阵
LCALL DIS_CMD _WRT
CALL DIS_CUR_OFF
MOV 42H,#20
MOV 43H,#32
XIAN: LCALL GET_TEMPER
LCALL DISP
LCALL DELAY43MS
MOV A,TEMPER_NUM
SUBB A,42H
JC ZZZL
MOV A,TEMPER_NUM
SUBB A,43H
JNC ZZZ2
SETB P20
SETB P21
SETB P22
JMP XIAN
ZZZL: CLR P20
CLR P22
JMP XIAN
ZZZ2: CLR P20
CLR P21
JMP XIAN
INT0: ;扫描键盘程序
LCALL ASK
SAO: CLR 01H
LCALL KEY
JNB 01H,SAO
CJNE A,#10,PAN
LCALL ANSW
RETI
PAN: CJNE A,#12,SAO
RETI ;显示函数部分,可供调用
DIS_CUR_OFF: MOV R0,#0CH
LCALL DIS_CMD_WRT
RET
DIS_CUR_ON: MOV R0,#0EH
LCALL DIS_CMD_WRT
RET
CHK_BUSY_FLG: MOV P0,#0FFH
CLR D2RS
NOP
NOP
NOP
LCALL DISPLAY_RD
JB ACC7,CHK_BUSY_FLG
RET
CLEAR_DIS: MOV R0,#01H
LCALL DIS_CMD_WRT
RET
DIS_CMD_WRT: LCALL CHK_BUSY_FLG
MOV P0,R0
CLR D2RS
NOP
NOP
NOP
LCALL DISPLAY_WRT
RET
DIS_DATA_WRT: LCALL CHK_BUSY_FLG
CJNE A,#10H,DIS_DAT_WRT1
MOV P0,#0C0H ;1100,00000行起始地址为40
CLR D2RS
NOP
NOP
NOP
LCALL DISPLAY_WRT
DIS_DAT_WRT1: MOV P0,R0
SETB D2RS
NOP
NOP
NOP
LCALL DISPLAY_WRT
RET
DISPLAY_WRT: CLR D2RW
NOP
NOP
NOP
SETB D2E
NOP
NOP
NOP
CLR D2E
NOP
NOP
NOP
RET
DISPLAY_RD: SETB D2RW
NOP
NOP
NOP
SETB D2E
NOP
NOP
NOP
MOV A,P0
NOP
NOP
NOP
CLR D2E
NOP
NOP
NOP
RET
DIS_DATA_RD: LCALL CHK_BUSY_FLG
MOV P0,#0FFH
SETB D2RS
LCALL DISPLAY_RD
RET ;键盘程序,出口:A为按键值 01H:0无键按下 1 有键按下
KEY: MOV KEYPORT,#0FH
MOV A,KEYPOR
CJNE A,#0FH,KEYDOWN
MOV A,#0FFH
RET
KEYDOWN: LCALL DELAY43MS
MOV KEYPORT,#0FH
MOV A,KEYPORT
CJNE A,#0FH,KEYDOWN_YES
MOV A,#0FFH
RET
KEYDOWN _YES: MOV B,A
MOV KEYPORT,#0F0H
MOV A,KEYPORT
ORL A,B
PUSH 30H
MOV 30H,A
MOV R3,#10H
MOV DPTR,#KEYVALUE
NEXT_KEY: MOV A,R3
MOVC A,@a+dptr
CJNE A,30h,NEXTKEYVALUE
DEC R3
POP 30H
WAITKEY_F: MOV KEYPORT,#0FH
MOV A,KEYPORT
CJNE A,#0FH, WAITKEY_F
MOV A,R3
SETB 01H
RET
NEXTKEYVALUE: DJNZ R3,NEXT_KEY
DEC R3
POP 30H
WAITKEY_FREE: MOV KEYPORT,#0FH
MOV A,KEYPORT
CJNE A,#0FH, WAITKEY_FREE
MOV A,R3
SETB 01H
RET
KEYVALUE: DB 0FFH,7EH,7DH,7BH,77H,0BEH,0BDH,0BBH,0B7H,0DEH,0DDH,0DBH,0D7H,0EEH,0EDH,0EBH,0E7H
DELAY43MS: PUSH A
MOV A,R3
PUSH A
MOV A,R2
PUSH A
MOV R3,#43
DELAY: MOV R2,#0FAH
LOOP: NOP ;内层循环为1MS
NOP
DJNZ R2,LOOP
DJNZ R3, DELAY
POP A
MOV R2,A
POP A
MOV R3,A
POP A
RET ;确认是否修改温度设定
ASK: MOV R0,#01H ;清屏并置地址计数器AC为0
LCALL DIS_CMD_WRT
MOV 40H,#0
ZDZ: MOV DPTR,#LINE
MOV A,40H
MOVC A,@A+DPTR
MOV R0,A
LCALL DIS_DATA_WRT
INC 40H
MOV A,40H
MOVC A,@A+DPTR
CJNE A,#00H,ZDZ
RET
LINE: DB " ARE YOU SURE
CHANGE T(Y/N)",00H
ANSW: MOV R6,42H
MOV R7,43H
MOV R0,#01H
LCALL DIS_CMD_WRT
MOV R0,#44H
CALL DIS_DATA_WRT
MOV R0,#6FH
CALL DIS_DATA_WRT
MOV R0,#77H
CALL DIS_DATA_WRT
MOV R0,#6EH
CALL DIS_DATA_WRT
MOV R0,#3AH
CALL DIS_DATA_WRT
MOV 40H,#0
CLR 00H
JMP SAO1
GAI: MOV R0,#0FEH
CALL DIS_DATA_WRT
MOV R0,#55H
CALL DIS_DATA_WRT
MOV R0,#70H
CALL DIS_DATA_WRT
MOV R0,#3AH
CALL DIS_DATA_WRT
MOV 40H,#0
SAO1: CLR 01H
LCALL KEY
JNB 01H,SAO1
MOV R1,A
MOV B,#10
DIV AB
JZ NEXT2
MOV A,A1
CJNE A,#11,XU
JB 00H,DOWN
MOV 42H,40H
CPL 00H
JMP GAI
DOWN: MOV 43H,40H
RETI
XU: CJNE A,#12,SAO1
MOV 42H,R6
MOV 43H,R7
RETI
NEXT2: MOV A,R1
ADD A,#30H
MOV R0,A
LCALL DIS_DATA_WRT
MOV A,R1
XCH A,40H
MOV B,#10
MUL AB
NOP
CLR DQ
CLR C
WR1: CLR DQ
MOV R3,#6
DJNZ R3,$
RR R4,#2 R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET ; 将从DS18B20中读出的温度数据进行转换
TEMPER_COV: MOV A,#0f0H
ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值
SWAP A
MOV TEMPER_NUM,A
MOV A,TEMPER_L
JNB ACC3,TEMPER_COV1 ; 四舍五入去温度值
INC TEMPER_NUM
TEMPER_COV1:MOV A,TEMPER_H
ANL A,#07H
SWAP A
ORL A,TEMPER_NUM
MOV TEMPER_NUM,A ; 保存变换后的温度数据
RET ;AD0832:
SETB DI
SETB DO
SETB CLK
CLR CS
NOP
SETB CS
CLR CLK
CLR CS
CALL DELAY1
SETB DI
SETB CLK
NOP
CLR CLK
SETB DI
SETB CLK
NOP
CLR CLK
CLR DI
SETB CLK
NOP
CLR CLK
NOP
SETB CLK
NOP
CLR CLK
NOP
SETB CLK
MOV C,DO
CLR CLK
RLC A;7
SETB CLK
MOV C,DO
CLR CLK
RLC A 6
SETB CLK
MOV C,DO
CLR CLK
RLC A ;5
SETB CLK
MOV C,DO
CLR CLK
RLC A ;4
SETB CLK
MOV C,DO
CLR CLK
RLC A ;3
SETB CLK
MOV C,DO
CLR CLK
RLC A ;2
SETB CLK
MOV C,DO
CLR CLK
RLC A ;1
SETB CLK
MOV C,DO
CLR CLK
RLC A ;0
SETB CLK
NOP
CLR CLK ;1
NOP
SETB CLK
NOP
CLR CLK ;2
NOP
SETB CLK
NOP
CLR CLK ;3
NOP
SETB CLK
NOP
CLK ;4
NOP
SETB CLK
NOP
CLR CLK ;5
NOP
SETB CLK
NOP
CLR CLK ;6
NOP
SETB CLK
NOP
CLR CLK ;7
NOP
SETB CLK
NOP
CLR CLK
NOP
SETB CLK
NOP
CLR CLK
NOP
CALL DELAY1
SETB CS
RET
DELAY1: MOV R7,#10
DELAY2: NOP
NOP
DJNZ R7,DELAY2
RET
51系列的单片机如果没有写入保护的话是可以的,需要使用并口的编程线也就是ISP线连接,然后读取芯片到缓存中,再另存为hex文件,最后找个反编译软件翻译成汇编,如果要弄成C只能靠人工一点一点来了。
ROM是用来存放程序代码和不需要修改的用户数据,有些单片机还带有片内EEPROM用来存放不需要经常修改但掉电后又需要保存的数据,RAM是用来存放程序运行时变量、堆栈、临时数据等要频繁读写的数据,寄存器是跟功能有关的,是为了实现某些功能而设的 。
以上就是关于51单片机怎么读取P0,P1口的值,是要先给一个高电平才能读取吗c程序怎么写全部的内容,包括:51单片机怎么读取P0,P1口的值,是要先给一个高电平才能读取吗c程序怎么写、keil5如何加载51芯片、通过什么软件读取单片机里的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)