51单片机怎么读取P0,P1口的值,是要先给一个高电平才能读取吗c程序怎么写

51单片机怎么读取P0,P1口的值,是要先给一个高电平才能读取吗c程序怎么写,第1张

为了保险一般需要先给送一个“高”,再读取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芯片、通过什么软件读取单片机里的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9784562.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存