这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 有个程序请教,很急啊!!!!

共2条 1/1 1 跳转至

有个程序请教,很急啊!!!!

院士
2006-09-17 18:14:16     打赏
有个程序请教,很急啊!!!!



关键词: 有个     程序     请教     急啊    

院士
2006-12-22 22:43:00     打赏
2楼
;为什么红色的地方有错的?难道这样的间址方式不对?请指点.
很急啊!!!!!!!!!!!!
org 0000h
ajmp star
org 0020h
star:                     ;初始化把所有的位全部清零

mov a,#00h
mov 20H,a
mov 21H,a
mov 22H,a
mov 23H,a
mov 24H,a
mov 25H,a

stlop: acall display        ;调用显示
         jnb p3.2,we         ;监测键盘,如果p3.2按下那么执行显示
         jnb p3.3,wc
         jb p3.2,stlop

wc:    acall display
        acall dims
        jnb p3.3,wc
        acall  RK

we: acall display         ;显示保持!
       acall dims              ;延时1ms避免键盘误动作
       nb p3.2,we             ;如果p3.2还没有放开继续延时
       ljmp WK
count:                      ;计算数据部分
inc a_bit                     ;个位加1
mov a,a_bit
cjne a,#10,stlop                ;如果在10以内显示
mov a_bit,#00h                ;如果到了10则清除
inc b_bit                     ;10位加1
mov a,b_bit
cjne a,#10,stlop               ;如果在10以内显示
mov b_bit,#00h               ;如果到了10则清除
inc c_bit                     ;百位加1
mov a,c_bit
cjne a,#10,stlop
mov c_bit,#00h
inc d_bit
mov a,d_bit
cjne a,#10,stlop
mov d_bit,#00h
inc e_bit
mov a,e_bit
cjne a,#10,stlop
mov e_bit,#00h
inc f_bit
mov a,f_bit
cjne a,#10,stlop
mov f_bit,#00h
ajmp stlop

display:                        ;显示

mov dptr,#numtab               ;送数据表
mov a,a_bit                    ;送个位数据
MOVC A,@A+DPTR            ;查表
mov p0,a                      ;送p0口显示
clr p2.6                       ;选中第一个数码管
acall dims                     ;显示1ms
setb p2.6                      ;关闭显示
mov a,b_bit                    ;送10位数据
MOVC A,@A+DPTR            ; 查表
mov p0,a                      ;送p0口显示
clr p2.5                       ;选中第二个数码管
acall dims                    ;显示1ms
setb p2.5                      ;关闭显示
mov a,c_bit
MOVC A,@A+DPTR
mov p0,a
clr p2.4
acall dims
setb p2.4
mov a,d_bit
MOVC A,@A+DPTR
mov p0,a
clr p2.3
acall dims
setb p2.3
mov a,e_bit
MOVC A,@A+DPTR
mov p0,a
clr p2.2
acall dims
setb p2.2
mov a,f_bit
MOVC A,@A+DPTR
mov p0,a
clr p2.1
acall dims
setb p2.1
ret
dims:                      ;数码管延时1MS
MOV R7,#2
DJNZ R7,$
RET
                                             ;数码管代码表
numtab: db 28h,7eh,0a2h,62h,74h,61h,21h,7ah,20h,60h
;0 1 2 3 4 5 6 7 8 9

WK:
        CLR P3.7
        MOV R1,#6H
        MOV R2,#20H
IIC_write:

     SETB P1.0           ;先使IIC总线处于空闲状态
     SETB P1.1
     NOP
     CLR P1.1           ;启动IIC总线
     NOP
     CLR P1.0
     MOV A,#0A0H        ;AT24C02七位地址码1010000和一位写信号0
     LCALL write_byte   ;调用写一个字节数据子程序
     MOV A,R2           ;选中AT24C02的20元
     LCALL write_byte
KK:  MOV A,@R2          ;向AT24C02的20H写数据@R2
     LCALL write_byte
     INC R2
     DJNZ R1,KK
     CLR P1.0            ;停止IIC总线,使其处于空闲状态
     NOP
     CLR P1.1
     NOP
     SETB P1.0
     NOP
     SETB P1.1
     NOP
     SETB P3.7
     RET

Write_byte:

MOV R7,#08               ;一个字节分8次写
GO1: NOP
CLR P1.0
NOP
RLC A
MOV P1.1,C
SETB P1.0
DJNZ R7,GO1
CLR P1.0                      ;发第9个时钟脉冲,准备接收应答信号
NOP
SETB P1.0
NOP
WAIT:JB P1.1,WAIT      ;应答信号有效,数据传送成功就返回
CLR P1.0
RET

RK:

CLR P3.7
MOV R1,#6H
MOV R2,#20H

IIC_read:

SETB P1.0                     ;使IIC总线处于空闲状态
SETB P1.1
NOP
CLR P1.1                     ;启动IIC总线
NOP
CLR P1.0
MOV A,#0A0H             ;AT24C02七位地址码1010000和一位写信号0
LCALL write_byte
MOV A,R2                    ;选中AT24C02的10H单元
LCALL write_byte
SETB P1.0                  ;再次启动IIC总线
SETB P1.1
NOP
CLR P1.1
NOP
CLR P1.0
MOV A,#0A1H                ;AT24C02七位地址码1010000和一位读信号1
LCALL write_byte           ;调用写一个字节数据子程序

F1:     
LCALL read_byte          ;从AT24C02的10H单元读数据
MOV @R2,A                ;保存读的一个字节数据
INC R2
DJNZ R1,F1
CLR P1.0            ;停止IIC总线,使其处于空闲状态
NOP
CLR P1.1
NOP
SETB P1.0
NOP
SETB P1.1
NOP
SETB P3.7
RET

Read_byte:
MOV R7,#08       ;一个字节分8次读
GO 2: CLR P1.0
NOP
SETB P1.0
NOP
MOV C,P1.1
RLC A
DJNZ R7,GO2
CLR P1.0
NOP
SETB P1.1        ;第9个时钟脉冲,8031发送非应答信号,通知AT24C02停止发送数据

SETB P1.0
RET


END
1: 当然有错!!!间接寻址中的Rn的n只能是0或1。 2: 请教您一下:“很稳啊”是什么意思啊?好像和这个主题很难切入! 3: 是啊!!感谢楼上!!我很久没有写单片机程序了,把这点忘了!
谢谢! 4: 不客气!不过我建议你在对E2PROM的操作(读和写)间隔时间要大于10ms。比如在连续写时,调用写操作之前或之后要加延时!不然是无法写进的。页操作也是如此!

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]