原创 一点随笔 ps我爱这土地

2007-11-24 17:24 2644 10 10 分类: 工程师职场


刀锋舞者 
做了2天了,依旧没有成功,自我感觉是浪费了很多时间,因为没有成功


,写的近200行的汇编程序,真是个浩繁的工程,这算是失败么?有点不


想做了,耽误了太多学习的时间了,这么长时间,做了一个电压表,而


我的自行车测速加里程的程序则没有做完,一种矛盾的感觉,有点迷茫


,人说,做电子的有那么多的东西要做,你不肯能学会很多,会做一样


就可以了,而我的这点编程都没弄好,以前打算这个学期一直到毕业,


疯狂的练习,设计硬件和编写程序,学好C和ARM,可是这个半学期,又


是这样快的过去了,不想在课本的理论上下很大的功夫,虽然理论很重


要。又要面临一个决定,现在想想,我的决定怎么总是那么多呢。
明天阿妈要来济南了,去看下阿妈,也放松一下,让自己的心情好一点


,亲情无价,我爱我的阿妈,阿爸,阿姐,阿哥,还有我的熊猫。
自己还得走下去,无论有多难,我爱我的编程和设计。
没有烟,几天的泡面和挂面,过来了,除了上几节课,就是整天的呆在


电脑旁,看着那程序,调。。调。作为一个初学者,有那么多要学的,


发现这需要的不仅仅是兴趣了,需要毅力,坐在电脑旁6,7个小时的感


觉,眼睛变成了熊猫眼,肩膀累得要死,想哭得感觉,我的熊猫走了。
过几天,好好上几节课,调整一下,1年半的时间,我的电子科技大学还


在等着我。疯狂。
 贴上我的程序哈,还有仔细调试,写了一个下午,终于把尾巴补完了。
 有高手帮忙看下。一个自行车的测速,和里程的小系统。
 我希望交很多很多的朋友,热爱单片的朋友,我的
       QQ543396320
 邮箱:1226ehziy@163.com
 很菜,可很努力。


;SPEED,WHEN THE DISTANCE REACHS TO 4999 THEN LOAD 0.
SCL BIT P1.0
SDA BIT P1.1
A1 BIT P1.2
SPEED EQU 40h;41h 40h为存储的速度
DISTANCE EQU 35H;35H到30h之间要显示的距离十进制形式
COUNT EQU 39H;39H存储中断次数
ORG 0000H
AJMP START
ORG 0003H
AJMP IN0
ORG 000BH
AJMP TIMER00
ORG 0013H
AJMP IN1
ORG 001BH
AJMP TIMER11
ORG 0030H
;主程序的开始
START:
  MOV SP,#60H;堆栈的赋初值
  MOV R0,#00H
  DJNZ R0,$;等待系统稳定
  SETB RS0
  MOV R0,#40H
  SETB RS1
  CLR RS0
  MOV R0,#0A0H;
  MOV R1,#0A1H;这是I2C的读写器件地址
  CLR RS1
  MOV R0,#30H
  MOV R1,#8
  ANL A,#00H
CLEAR:
  MOV @R0,A
  INC R0
  DJNZ R1,CLEAR;从30H到37H全部清零
  MOV TH1,#3CH
  MOV TL0,#0B0H;50MS中断1次
  MOV TMOD,#25H;T1 MODE 1 TIME,T0 MODE 1 COUNT
  SETB IT0
  SETB IT1
  SETB TR0
  MOV IE,#1FH;一系列的中断初始化
  CALL I2C_R;读I2C
LOP:
  CALL BCD
  CALL DECIMAL
  CALL DISPDIS;调用距离显示程序
  CALL I2C_W;写入I2C,以供以后调用,因为每次电源复位后RAM中的数据变了,要调用以前存储的数据。
  AJMP LOP
;主程序结束,以下为子程序
BCD:;这是把距离的16进制数变为BCD码,最后BCD码存在42H,41H,40H从高到低。
   ;要转化的值放在R6,R7中;转换完后的值放在R2,R3,R4中
   MOV R6,TH0
   MOV R7,TL0
   CLR A;唬拢茫穆氤跏蓟? 
   MOV R3,A  
   MOV R4,A  
   MOV R5,A  
   MOV R2,#10H;转换双字节十六进制整数  
 HB3:MOV A,R7; 
   RLC A  
   MOV R7,A  
   MOV A,R6  
   RLC A  
   MOV R6,A  
   MOV A,R5;BCD码带进位自身相加,相当于乘2  
   ADDC A,R5  
   DA A;十进制调整  
   MOV R5,A  
   MOV A,R4  
   ADDC A,R4  
   DA A  
   MOV R4,A  
   MOV A,R3  
   ADDC A,R3  
   MOV R3,A;双字节十六进制数的万位数不超过6,不用调整  
   DJNZ R2,HB3;处理完16bit
   MOV 42H,R3
   MOV 41H,R4点击看大图
   MOV 40H,R5
   RET
DECIMAL:;这是把BCD码分解,把十进制的各个数分别存在6个单元中,以供调用显示方便。
  MOV A,42H;把BCD码分解放在6个单元中,以备调用,37H..32H
  ANL A,#0F0H;下面是把BCD码变成单个的十进制数
  SWAP A
  MOV 37H,A
  MOV A,42H
  ANL A,#0FH
  MOV 36H,A
  MOV A,41H
  ANL A,#0F0H
  MOV 35H,A
  SWAP A
  MOV A,41H
  ANL A,#0FH
  MOV 34H,A
  MOV A,40H
  ANL A,#0F0H
  SWAP A
  MOV 33H,A
  MOV A,40H
  ANL A,#0FH
  MOV 32H,A
  RET   
DISPDIS:;显示子程序
    MOV A,#0FEH
    MOV R0,#37H
    MOV R1,#8
 D1:MOV P2,A
    MOV P0,@R0
    DEC R0
    RL A
    CALL DELAY
    DJNZ R1,D1
    RET
;以下为一些列的I2C操作


I2C_W:
   CLR RS0
   SETB RS1
   CALL I2C_START
   ;写入字节地址
   MOV A,#00H
   CALL I2C_IW
   ;写入TH0
   MOV A,TH0
   CALL I2C_IW
   ;写入TL0
   MOV A,TL0
   CALL I2C_IW
   CLR RS0
   CLR RS1
   RET
I2C_START:
  ;启动信号
  SETB SDA
  SETB SCL
  NOP
  CLR SDA
  NOP
  NOP
  CLR SCL
  MOV A,@R0
 I2C_IW:
    MOV R7,#08H
     ASHIFT:
            CLR SCL
            RLC A
            MOV SDA,C
            NOP
            NOP
            SETB SCL
            NOP
            NOP
            DJNZ R7,ASHIFT
            SETB SDA
            SETB SCL
            JB SDA,$ ;  等待IC卡确认信号
            CLR SCL
            NOP
            NOP
            RET
I2C_R:
   CLR RS0
   SETB RS1
   INC R0
   CALL I2C_START
   ;写入字节地址
   MOV A,#00H
   CALL I2C_IW
   ;读出
   CALL I2C_IR
   MOV TH0,A
   ;读出
   CALL I2C_IR
   MOV TL0,A
   CLR RS0
   CLR RS1
I2C_IR:
     MOV R7,#08H
    ASHIFT1:
     CLR SCL
     RLC A
     MOV C,SDA
     NOP
     NOP
     SETB SCL
     NOP
     NOP
     DJNZ R7,ASHIFT1
     SETB SDA
     SETB SCL
     JB SDA,$ ;  等待IC卡确认信号
     CLR SCL
     NOP
     NOP


     RET           
  


DELAY:;显示的时候用的延时程序
    MOV R6,#35
 D2:MOV R7,#250
    DJNZ R7,$
    DJNZ R6,D2
    RET
;以下为中断服务的程序
IN0:
    RETI
IN1:
    RETI
TIMER00:
    CLR TF0
    RETI
TIMER11:;主要是用来计算速度的,主要的思想是,因为自行车的速度不会很快,所以每次只看TL0的值,因为T1没隔50MS中断一次,所以需要20次才等到1S,然后把两次的TL0值相减,就得到了速度值。
    CLR TF1
    SETB RS0;使用第1组寄存器,这也是为什么一开始就用1组
    MOV @R0,TL0
    INC R0
    MOV TH1,#3FH
    MOV TL1,#0B0H
    CJNE R0,#60H,TT
    PUSH ACC
    PUSH PSW
    MOV A,59H
    SUBB A,40H
    MOV B,#10
    DIV AB
    MOV 31H,A
    MOV 30H,B
 TT:CLR RS0
    RETI
END
   




 
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条