my blog my blog

Tag: 汇编
51单片机日记:说说长调短调及返回

 

每次仔细看遍书都会有收获。今天记录下子程序调用。其实呢,就是lcall或者acall到一个address,然后这时候其实sp指针是有动作的哦,然后通过ret可以将sp指针的变化弹到pc指针,回到程序,这个过程就是程序的调用啦。

 

  1.                ORG        1000H 
  2. Father:        MOV        A,        #0FFH 
  3.                LCALL      Son                   ;调用子程序 
  4.                LJMP       Father 
  5. Son:           ANL        A,        #0FH        ;高位清零 
  6.                RET                              ;返回主程序 

过程是这样子的,首先father进程把FFH赋值给累加器A,然后调用子程序,这时候PC=(PC)+3 ; SP=(SP)+1 ;(SP)=(PC)L ; SP=(SP)+1 ;(SP)=(PC)H ; 然后开始跳到子程序son,在RET的时候,SP先弹值到(PC)H,然后SP-1,再弹值到(PC)L,最后SP-1回到初值,这样子,PC就又变为LJMP语句所在的地址了,也就是从LJMP开始继续执行。

PUSH与POP哇,LCALL/ACALL与RET哇一定要成对使用避免错误产生~~~

51单片机日记:从最简单的点小灯开始

 

对于P0 P1 P2 P3的端口的写,直接送数即可。虽然可以查到这些端口的地址,但是是无法直接写数到地址的。所以也就不需要记住他们的地址鸟,直接往端口送数即可。如果想直接操作P2.0 P2.1这样的端口,用位操作即可。延时程序嘛就是给单片机一些数让它去循环,时间是循环次数*指令的周期/机器周期的结果。

 

  1.         ORG             000H 
  2.         LJMP            MAIN 
  3.         ORG             030H 
  4. MAIN:   MOV             P2,     #00H 
  5.         LCALL           DELAY 
  6.         SETB            P2.0 
  7.         LCALL           DELAY 
  8.         SETB            P2.1 
  9.         LCALL           DELAY 
  10.         SETB            P2.2 
  11.         LCALL           DELAY 
  12.         SETB            P2.3 
  13.         LCALL           DELAY 
  14.         SETB            P2.4 
  15.         LCALL           DELAY 
  16.         SETB            P2.5 
  17.         LCALL           DELAY 
  18.         SETB            P2.6 
  19.         LCALL           DELAY 
  20.         SETB            P2.7 
  21.         LCALL           DELAY 
  22.         LCALL           MAIN 
  23.  
  24. DELAY:  MOV             R5,     #04H 
  25. F3:     MOV             R6,     #0FFH 
  26. F2:     MOV             R7,     #0FFH 
  27. F1:     DJNZ            R7, F1           
  28.         DJNZ            R6, F2 
  29.         DJNZ            R5, F3 
  30.         RET 
  31.         END 

 
呃,其实自己也觉得代码有点儿傻,记录吧,一点点儿来~~~

 

开始鼓捣51单片机

 

不行,得找点儿东西玩儿鸟,混日子是不对的。在儿童节木有收到啥礼物,自己淘了一个单片机的板子,学习点小灯,写小控制程序~~~

话说俺们只开了汇编,而且感觉讲课很多东西都得靠自己,特别是实际接触,如何去写如何去实现,如何去链接等等,呃。

今天板子到了,把小灯哇,蜂鸣器哇,数码管哇都搞了一遍,板子没啥问题应该。

记录下:

下载时候要注意波特率设置,不要太高,失败就降低。

com口从设备管理器的通信中选择,可以从属性的高级去定义。

HC6800的板子用谱中ISP程序下载比STP的好用一些,特别是有auto功能。

大体就先弄到这里吧,这几天看看他们如何用C来实现的,郭天祥的他们推荐很多,看了一集还挺好的,就是时间有点儿长哇~~~

今天windows又进不去鸟,继续拆下硬盘挂移动硬盘到舍友的电脑修复磁盘,然后又正常启动,发现可能跟装linux有关,因为上次也是,很纠结,因为文件系统不知道是哪里的损坏,因为在linux下可以正常访问,想到好像前几天看订阅中还有网友也有同种状况呢,我这是第二次鸟,不晓得。。。

自己的光驱貌似报废了,读盘能力几乎没有了,很郁闷,算鸟,等着假期有钱就再上个硬盘到光驱位吧。。。

杂记到此结束,吼吼,开始折腾51单片机~~~