救命!!关于AT89C2051的P1口的用法!!??

wangluyan 2003-06-14 12:18:17
利用仿真器能够顺利通过!当把程序写入芯片运行时,怎么也运行不了!

注:P1口作为输入和输出口,P1.0和P1.1口线作为输出口时,要接上拉电阻,而作为输入口时,要接下拉电阻。但是程序就是不能运行!!


P1口作为键盘扩展口,其中利用到P1.0,P1.1,P1.2以及P1.4,P1.5,P1.6六个口线!
...全文
404 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
P1口作为输入和输出口,P1.0和P1.1口线作为输出口时,要接上拉电阻,而作为输入口时,还是只接上拉电阻。
zwchen2000 2003-06-14
  • 打赏
  • 举报
回复
还有晶针起作用没有 ,仿真是可能用外接晶针
zwchen2000 2003-06-14
  • 打赏
  • 举报
回复
p1口不要啊,p0口才要的啊,p1口内有上拉电阻,p0口作为I/O是要 上拉啊
可能是程序没运行,如看门狗没起作用,或没RESET
wangluyan 2003-06-14
  • 打赏
  • 举报
回复
P1.0和P1.1口线作为输入口时不接下拉电阻!
ldqmoon 2003-06-14
  • 打赏
  • 举报
回复
P1.0和P1.1口线作为输出口时,要接上拉电阻,而作为输入口时,要接下拉电阻

你的意思是不是上拉电阻和下拉电阻你都接了?
zys0001 2003-06-14
  • 打赏
  • 举报
回复
我刚用2051做过一个系统。你说的程序不能运行是不是P1口没有输出程序要求的电平吧?若是这样,你看一下是否你的外围电路需要的驱动电流太大,2051的拉电流很小,以致没法驱动,故一直输出不正确的电平(一般都为低电平)。还有2051没必要接下拉电阻,纯属多余。
wangluyan 2003-06-14
  • 打赏
  • 举报
回复
有软件的问题,也有硬件的问题!

硬件问题:
P1口的P1.0和P1.1口线作为输出口时,没接上拉电阻,其他的口线作为输入口时,没接下拉电阻。

软件问题:
xiaoxiaodie()写的很清楚!
When 1s are written to Port 1 pins, they can be used as inputs. When pins P1.2 to P1.7 are used as inputs and are externally pulled low, they will source current (I IL ) because of the internal pullups.
wangluyan 2003-06-14
  • 打赏
  • 举报
回复
并不是烧录器不能正确的烧写.

主要是在处理按键的子程序上!
jessi008 2003-06-14
  • 打赏
  • 举报
回复
检查一下你确实写好芯片了吗?
有的烧录器,不能正确的烧写.?
chip是否为水活?
reset是否可靠+电?

仔细检查吧!p1口,就是一般的i/o口,没什么特殊!
xiaoxiaodie 2003-06-14
  • 打赏
  • 举报
回复
;键码保存在R6,A中
KEY_P:
MOV R6,#00H
MOV R7,#03H
mov r1,#30h
MOV A,#0F1H
L_LOOP:
MOV P1,A
mov r3,a
mov a,p1
mov @r1,a
inc r1
INC R6
nop
MOV C,KEYIN3
JC OVER
INC R6
nop
MOV C,KEYIN2
JC OVER
INC R6
NOP
MOV C,KEYIN1
JC OVER
mov a,r3
RL A
ORL A,#0F0H
DJNZ R7,L_LOOP
JB ACC.3,ERROR
OVER:
MOV A,R6
RET
ERROR:
MOV A,#00H
RET
xiaoxiaodie 2003-06-14
  • 打赏
  • 举报
回复
问题产生的原因:

现在把P1口描叙如下:
Port 1
Port 1 is an 8-bit bi-irectional I/O port. Port pins P1.2 to P1.7 provide internal Pullups. P1.0 and P1.1 require exter-nal pullups. P1.0 and P1.1 also serve as the positive input (AIN0) and the negative input (AIN1), respectively, of the on-chip precision analog comparator. The Port 1 output buffers can sink 20 mA and can drive LED displays directly.When 1s are written to Port 1 pins, they can be used as inputs. When pins P1.2 to P1.7 are used as inputs and are externally pulled low, they will source current (I IL ) because of the internal pullups.
Port 1 also receives code data during Flash programming
and verification.
wangluyan 2003-06-14
  • 打赏
  • 举报
回复
程序简单说明:

程序开始利用数码管显示一定的数字!

接下来是键盘判断程序!

判断后,显示相关的键值,显示部分是利用74HC595(串入并出,占用口线P3.0,P3.1,P3.2)来驱动数码管和LED灯!

P3.4外接一个灯泡,P3.5外接一个扬生器!
wangluyan 2003-06-14
  • 打赏
  • 举报
回复
程序如下:
DATA1 BIT P3.0
SRCLK BIT P3.1
RCLK BIT P3.2

LAMP BIT P3.4
SPEAKER BIT P3.5

KEYOUT1 BIT P1.0
KEYOUT2 BIT P1.1
KEYOUT3 BIT P1.2

KEYIN1 BIT P1.4
KEYIN2 BIT P1.5
KEYIN3 BIT P1.6

ORG 0000H
AJMP START
ORG 00A0H
START:
mov sp,#60h ;显示数据
MOV A,#003H
acall DSNEXT
mov a,#0f2h
acall DSNEXT
NOP
CLR RCLK
NOP
SETB RCLK
NOP
NOP
CLR RCLK
ajmp $
MAIN:
nop
nop
setb LAMP
setb SPEAKER
ACALL KEY_ON ;判断有无键按下
JNZ DELAY ;有键按下,A不等于零,转到消抖
AJMP MAIN
DELAY:
cpl p3.3
ACALL DL10MS ;delay 10ms
ACALL KEY_ON ;判断有无键按下
JNZ KEY_NUM ;A不等于零,键确按下,转定按键位置
AJMP MAIN ;是键消抖,go on!
KEY_NUM:
ACALL KEY_P ;调定键位置子程序
ANL A,#0FFH
JZ MAIN
ACALL ALARM
AJMP MAIN
RET
;********************************************************************
DL10MS:
; MOV R7,#14H
MOV R7,#014H
LOOP1:
MOV R6,#0F6H
LOOP2:
NOP
NOP
DJNZ R6,LOOP2
DJNZ R7,LOOP1
RET
;********************************************************************
KEY_ON:
MOV A,#0FFH
MOV P1,A
nop
nop
MOV A,P1
ANL A,#70H
RET
;**********************************************************************
;键码保存在R6,A中
KEY_P:
MOV R6,#00H
MOV R7,#03H
mov r1,#30h
MOV A,#01H
L_LOOP:
MOV P1,A
mov r3,a
mov a,p1
mov @r1,a
inc r1
INC R6
nop
MOV C,KEYIN3
JC OVER
INC R6
nop
MOV C,KEYIN2
JC OVER
INC R6
NOP
MOV C,KEYIN1
JC OVER
mov a,r3
RL A
DJNZ R7,L_LOOP
JB ACC.3,ERROR
OVER:
MOV A,R6
RET
ERROR:
MOV A,#00H
RET
;***************************************************************************
ALARM:
; clr SPEAKER
ACALL DISPLAY
; clr LAMP
RET
;****************************************************************************
DISPLAY:
MOV A,R6
MOV R5,A
MOV A,#01H
LOOP:
RR A
DJNZ R5,LOOP
CPL A
ACALL DSNEXT
MOV A,R6
DEC A
MOV DPTR,#TABLE
MOVC A,@A+DPTR
ACALL DSNEXT

NOP
CLR RCLK
NOP
SETB RCLK
NOP
NOP
CLR RCLK
RET
;****************************************************************************
DSNEXT:
MOV R1,#08H
DDSP1:
NOP
CLR C ;右移出低位
RRC A
MOV DATA1,C

NOP
CLR SRCLK
NOP
SETB SRCLK
NOP
NOP
CLR SRCLK

DJNZ R1,DDSP1
RET
;***********************************************************
TABLE: DB 60H,0daH,0f2H,66H,0b6H,0beh,0e0H,0feH,0f6H ;1,2,3,4,5,6,7,8,9
;***************************************************************************
END

wangluyan 2003-06-14
  • 打赏
  • 举报
回复
1):系统能够复位,因为我用复位按钮做的,能行!
2):晶针没有问题,因为我在初始时让他显示过数码管!
3):是AT89C2051,P1口的P1.0和P1.1口线作为输出口时,要接上拉电阻,其他的口线作为输入口时,接下拉电阻。
4):程序运行到键盘扫描时,不能运行!
syl79 2003-06-14
  • 打赏
  • 举报
回复
开玩笑?输入时要下拉做什么?用不着啊。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧