找回密码
 立即注册
楼主: ercircle

陈老师课程学习记录贴

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-17 18:35:48 | 显示全部楼层
第十集

分支程序
截图202504171833083776.jpg
截图202504171833181257.jpg
截图202504171833276678.jpg
汇编冒泡
截图202504171833462698.jpg
截图202504171833555701.jpg
截图202504171834041582.jpg
四位二进制数转ASCII码
截图202504171834206004.jpg
ASCII码转四位二进制数
截图202504171834343926.jpg
截图202504171834433169.jpg

截图202504171834535327.jpg
截图202504171835027335.jpg
截图202504171835145140.jpg
截图202504171835326730.jpg
截图202504171835416719.jpg

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-17 23:59:26 | 显示全部楼层
  1. ;*******************程序说明***********************
  2. /*
  3. 使用定时器1s切一次P2.0状态
  4. 100MS,执行一次C函数,通过直接位寻址间接切一次P2.1状态
  5. 500MS,切一次P2高4位状态
  6. */
  7. ;**************************************************
  8. $include (Ai8051U.inc)
  9. ;*******************常量定义***********************
  10.     CONSTVALUE1       EQU     1
  11.     CONSTVALUE2       EQU     2
  12.                
  13. ;*******************变量定义***********************
  14. ;测试定时器,1s切一次状态
  15. LED1 BIT P2.0
  16. ;测试外部C函数调用,100MS
  17. LED2 BIT P2.1
  18. ;20H~7FH 可位寻址
  19. ;测试位寻址
  20. FLAG1 BIT 20H.0
  21. FLAG2 BIT 7FH.0
  22. FLAG3 BIT 7FH.7
  23. ;1ms定时中断标识
  24. F1MS BIT 20H.1
  25. MSCOUNT DATA 30H
  26. MS100COUNT DATA 32H
  27. ;*******************外部变量及函数声明***********************
  28. ;EXTRN   CODE(RL_LAMP_APP);
  29. EXTRN   CODE(DELAY500MS);
  30. EXTRN   CODE(MyBank3Fun);
  31. EXTRN   CODE(MyBank2Fun);
  32. ;C函数调用测试       
  33. EXTRN   CODE(toggleBit);
  34. ;************************************************
  35. ?ED?MAIN    SEGMENT EDATA               ;定义数据段
  36.     RSEG    ?ED?MAIN
  37. EDATAVAR1:
  38.     DS      2
  39.        
  40.        
  41. ;*******************中断定义***********************
  42. CSEG    AT  0000H
  43. LJMP    RESET                       ;复位跳转       
  44. ORG 000BH               
  45. LJMP TIMER0_ISR
  46. ORG 1000H
  47.        
  48. ;********************主程序*************************
  49. ?PR?MAIN    SEGMENT CODE                ;定义代码段
  50. RSEG    ?PR?MAIN
  51. MAIN:
  52.         NOP
  53. RESET:
  54.     MOV     R0,#7FH
  55.     CLR     A
  56. CLEARRAM:
  57.     MOV     @R0,A
  58.     DJNZ    R0,CLEARRAM
  59. INIT_SP:
  60.         ;MOV SP,#80H
  61.         MOV     DR60,#0100H
  62. INIT_EAXFR:       
  63.         MOV     WTST,#00H
  64.     MOV     CKCON,#00H
  65.     SETB    EAXFR
  66.        
  67.         LCALL         TIMER0_INIT
  68.         CLR                F1MS
  69.         SETB    EA
  70. INIT_APP:       
  71.         MOV P2M0,#00H
  72.         MOV P2M1,#00H
  73.         MOV WR0,#0
  74.        
  75.         MOV EDATAVAR1,WR0 ; 初始化MSCOUNT为0
  76.         MOV MSCOUNT,WR0 ; 初始化MSCOUNT为0
  77.         MOV MS100COUNT,A;
  78.         SETB FLAG1
  79.         SETB FLAG2
  80.         SETB FLAG3
  81.         LCALL MyBank3Fun
  82.         LCALL MyBank2Fun
  83. RUN_APP:       
  84.         LOOP:
  85.                 JBC F1MS,LOOP_1MS_EVENT
  86.                 LCALL CHECK_LESS_500MS               
  87.                 ;LCALL RL_LAMP_APP       
  88.                 LJMP LOOP;
  89.                 LOOP_1MS_EVENT:
  90.                 LCALL FUN_100MS;
  91.                 LCALL FUN_1MS;
  92.                 LJMP LOOP;
  93. TIMER0_INIT:                                ;1毫秒@40.000MHz
  94.         ORL                AUXR,#80H                ;定时器时钟1T模式
  95.         ANL                TMOD,#0F0H                ;设置定时器模式
  96.         MOV                TL0,#0C0H                ;设置定时初始值
  97.         MOV                TH0,#063H                ;设置定时初始值
  98.         CLR                TF0                                ;清除TF0标志
  99.         SETB        TR0                                ;定时器0开始计时
  100.         SETB        ET0                                ;定时器0中断开
  101.         RET
  102. TIMER0_ISR:
  103.         SETB F1MS
  104.         RETI
  105. FUN_100MS:
  106.     INC MS100COUNT      ; 递增计数器(先低字节)
  107.     MOV A, MS100COUNT
  108.         CJNE A, #100,FUN_100MS_RET
  109.     ;达到100ms
  110.         ;CPL LED2
  111.         LCALL toggleBit
  112.         JC FUN_100MS_C1
  113.         CLR  LED2
  114.         SJMP FUN_100MS_CLR
  115. FUN_100MS_C1:
  116.         SETB LED2
  117.         SJMP FUN_100MS_CLR       
  118. FUN_100MS_CLR:       
  119.     CLR A      ; 清零
  120.         MOV MS100COUNT,A
  121. FUN_100MS_RET:
  122.         RET;
  123.        
  124.        
  125.        
  126.                
  127. CHECK_LESS_500MS:
  128.     ; 检查MSCOUNT是否小于500(0x01F4)
  129.     MOV A, MSCOUNT+1 ; 加载高字节
  130.     CJNE A, #01H, CHECK_LESS_500MS_1
  131. CHECK_LESS_500MS_1:
  132.         JC LESS_THAN_500;前数小于后数
  133.         LJMP GREATER_EQUAL_500;前数大于等于后数
  134.        
  135.     MOV A, MSCOUNT   ; 高字节等于0x01,检查低字节
  136.         CJNE A, #0F4H, CHECK_LESS_500MS_2
  137. CHECK_LESS_500MS_2:
  138.         JC LESS_THAN_500;前数小于后数
  139.         LJMP GREATER_EQUAL_500;前数大于等于后数
  140.         LESS_THAN_500:
  141.                 ; 设置P2的高四位为0
  142.                 ANL P2, #0x0F    ; 将P2的高四位清零,低四位保持不变
  143.                 SJMP CHECK_LESS_500MS_END   ; 跳转到更新P2的代码
  144.         GREATER_EQUAL_500:
  145.                 ; 设置P2的高四位为1
  146.                 ORL P2, #0xF0    ; 将P2的高四位置1,低四位保持不变
  147.         CHECK_LESS_500MS_END:
  148.                 RET
  149.        
  150.        
  151. FUN_1MS:
  152.         LCALL FUN_100MS;
  153.        
  154.     INC MSCOUNT      ; 递增计数器(先低字节)
  155.     MOV A, MSCOUNT
  156.         CJNE A, #00H,FUN_1MS_JUGE
  157.     INC MSCOUNT+1    ; 递增高字节
  158. FUN_1MS_JUGE:
  159.     ; 检查是否达到1000(0x03E8)
  160.     MOV A, MSCOUNT+1 ; 加载高字节
  161.     CJNE A, #03H, FUN_1MS_RET ; 比较高字节是否为0x03
  162.     MOV A, MSCOUNT   ; 高字节匹配,检查低字节
  163.     CJNE A, #0E8H, FUN_1MS_RET
  164.          
  165.          ; 触发条件:切换灯状态并清零
  166.         CPL LED1
  167.     CLR A      ; 清零低字节
  168.         MOV MSCOUNT,A
  169.         MOV MSCOUNT+1,A
  170. FUN_1MS_RET:
  171.         RET;
  172. END
复制代码

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-18 15:42:54 | 显示全部楼层

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-18 15:44:15 | 显示全部楼层
汇编编程中压栈和出栈的作用是什么:



截图202504181543371630.jpg
截图202504181543539869.jpg

截图202504181544061802.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-18 15:47:20 | 显示全部楼层
汇编与C混合编程说明及注意事项:

C51
截图202504181545139972.jpg
截图202504181545207282.jpg
C251
截图202504181545312967.jpg
截图202504181545402369.jpg
代码中C51 C251标准切换:
截图202504181546021168.jpg
寄存器堆:
截图202504181546165931.jpg

注意事项:
汇编函数可能会改变当前所选寄存器组中的所有寄存器内容,以及累加器(ACC)、寄存器 B、数据指针(DPTR)和程序状态字(PSW)寄存器的内容。
当从汇编语言中调用 C 函数时,需假定这些寄存器会被所调用的 C 函数破坏。
截图202504181546324200.jpg

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:162
  • 最近打卡:2025-05-01 06:56:44
已绑定手机

56

主题

1319

回帖

2938

积分

荣誉版主

无情的代码机器

积分
2938
发表于 2025-4-18 16:26:54 | 显示全部楼层
汇编字符串定义

截图202504181626119912.jpg
截图202504181626384631.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 20:05 , Processed in 0.628857 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表