当前位置:   article > 正文

51单片机(单片机原理及接口技术)汇编语言实验及代码_51单片机右侧接口代码

51单片机右侧接口代码

本篇文章为本人于单片机实验课的汇编程序项目代码整理,如有错误欢迎批评指正。

实验一:花样灯及蜂鸣器实验

实验目的:

        1、理解单片机综合训练平台上的发光二极管和蜂鸣器原理图;

        2、熟悉并理解发光二极管和蜂鸣器原理,并实现对发光二极管和蜂鸣器的编程控制;

        3、编程实现对发光二极管和蜂鸣器的控制。

实现功能:

        实现了五种方式的花样灯(具体如下),每次花样灯结束后蜂鸣器发出不同的滴滴提示音:

        1、方式一:单个LED灯由左至右亮灭,循环两个周期,结束后蜂鸣器短响一次;

        2、方式二:单个LED灯由右至左亮灭,循环两个周期,结束后蜂鸣器短响两次;

        3、方式三:LED灯由左至右逐渐全部点亮,循环两个周期,结束后蜂鸣器长响一次;

        4、方式四:LED灯由左至右逐渐全部熄灭,循环两个周期,结束后蜂鸣器长响两次;

        5、方式一:奇偶位LED交替闪烁,结束后蜂鸣器短响三次后长响一次。

具体代码:

  1. ORG 0000H
  2. AJMP MAIN;
  3. ORG 0030H;
  4. MAIN:
  5. MOV P2,#0A0H; ;关闭蜂鸣器
  6. MOV P0,#00H;
  7. MOV P2,#00H;
  8. LOOP1BE:
  9. MOV R4, #10H ;设置计数器的初始值
  10. MOV A,#0FEH ;设置LED初始亮位
  11. LOOP1: ;花样灯方式一
  12. MOV P2, #80H ;选择LED功能
  13. MOV P0, A ;LED位赋值
  14. ACALL DELAY ;调用延时子程序
  15. MOV P2, #00H ;初始化P2端口
  16. RL A ;左移一位
  17. DJNZ R4, LOOP1 ;计数器递减,如果不为零则继续循环
  18. BEEP1: ;蜂鸣器方式一:短响一次
  19. MOV P2, #0A0H
  20. SETB P0.6 ;打开蜂鸣器
  21. ACALL DELAY ;调用延时子程序
  22. CLR P0.6 ;关闭蜂鸣器
  23. LOOP2BE:
  24. MOV R4, #10H ;设置计数器的初始值
  25. MOV A,#7FH ;设置LED初始亮位
  26. LOOP2: ;花样灯方式二
  27. MOV P2, #80H
  28. MOV P0, A
  29. ACALL DELAY
  30. MOV P2, #00H
  31. RR A ;右移一位
  32. DJNZ R4, LOOP2 ;计数器递减,如果不为零则继续循环
  33. BEEP2: ;蜂鸣器方式二:短响两次
  34. MOV P2, #0A0H
  35. SETB P0.6
  36. ACALL DELAY
  37. CLR P0.6
  38. ACALL DELAY
  39. SETB P0.6
  40. ACALL DELAY
  41. CLR P0.6
  42. LOOP3BE:
  43. MOV R4, #10H ;设置计数器的初始值
  44. MOV DPTR,#TAB1
  45. LOOP3: ;花样灯方式三
  46. MOV P2, #80H
  47. MOVC A,@A+DPTR ;顺序读取码表
  48. MOV P0, A
  49. ACALL DELAY
  50. MOV P2, #00H
  51. INC DPTR
  52. CLR A ;初始化寄存器A
  53. DJNZ R4, LOOP3 ;计数器递减,如果不为零则继续循环
  54. BEEP3: ;蜂鸣器方式三:长响一次
  55. MOV P2, #0A0H
  56. SETB P0.6
  57. ACALL DELAY
  58. ACALL DELAY
  59. ACALL DELAY
  60. CLR P0.6
  61. LOOP4BE:
  62. MOV R4, #10H ;设置计数器的初始值
  63. MOV DPTR,#TAB2
  64. LOOP4: ;花样灯方式四
  65. MOV P2, #80H
  66. MOVC A,@A+DPTR ;顺序读取码表
  67. MOV P0, A
  68. ACALL DELAY
  69. MOV P2, #00H
  70. INC DPTR
  71. CLR A ;初始化寄存器A
  72. DJNZ R4, LOOP4 ;计数器递减,如果不为零则继续循环
  73. BEEP4: ;蜂鸣器方式四:长响两次
  74. MOV P2, #0A0H
  75. SETB P0.6
  76. ACALL DELAY ;调用延时子程序使蜂鸣器长响
  77. ACALL DELAY
  78. ACALL DELAY
  79. CLR P0.6
  80. ACALL DELAY
  81. SETB P0.6
  82. ACALL DELAY
  83. ACALL DELAY
  84. ACALL DELAY
  85. CLR P0.6
  86. LOOP5BE:
  87. MOV R4, #10H ;设置计数器的初始值
  88. MOV A,#0AAH;
  89. LOOP5: ;花样灯方式五
  90. MOV P2, #80H
  91. MOV P0, A
  92. ACALL DELAY
  93. MOV P2, #00H
  94. RR A
  95. DJNZ R4, LOOP5 ;计数器递减,如果不为零则继续循环
  96. JMP BEEP5
  97. BEEP5: ;蜂鸣器方式五:短响三次后长响一次
  98. MOV P2, #0A0H
  99. SETB P0.6
  100. ACALL DELAY
  101. CLR P0.6
  102. ACALL DELAY
  103. SETB P0.6
  104. ACALL DELAY
  105. CLR P0.6
  106. ACALL DELAY
  107. SETB P0.6
  108. ACALL DELAY
  109. CLR P0.6
  110. ACALL DELAY
  111. SETB P0.6
  112. ACALL DELAY
  113. ACALL DELAY
  114. ACALL DELAY
  115. CLR P0.6
  116. AJMP LOOP1BE
  117. ;码表一,循环至全亮功能
  118. TAB1:DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H,0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,00H
  119. ;码表二,循环至全灭功能
  120. TAB2:DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,00H,01H,03H,07H,0FH,1FH,3FH,7FH,0FFH
  121. DELAY: MOV R5,#04H ;将立即数传给寄存器 R5
  122. F3: MOV R6,#0FFH
  123. F2: MOV R7,#0FFH
  124. F1: DJNZ R7,F1 ;若为 0 程序向下执行,若不为 0 程序跳转到
  125. DJNZ R6,F2
  126. DJNZ R5,F3
  127. RET
  128. END

实验二:数码管实验

实验目的:

        1、 熟悉数码管原理图,掌握数码管段码与显示之间的关系;

        2、掌握共阳数码管的控制方式,能编程实现数码管段选和位选;

        3、编程实现数码管的静态显示和动态显示。

实现功能:

        1、在数码管1~8位上显示0~7数字。

具体代码:

  1. ORG 0000H
  2. LJMP MAIN;
  3. ORG 0030H;
  4. MAIN:
  5. MOV P2,#0A0H ;关闭蜂鸣器和LED
  6. MOV P0,#00H
  7. MOV P2,#80H
  8. MOV P0,#0FFH
  9. LOOP:
  10. MOV P2,#0C0H
  11. MOV P0,#01H ;数码管第1
  12. MOV P2,#0E0H
  13. MOV P0,#0C0H ;显示0
  14. ACALL DELAY ;调用延时程序
  15. MOV P2,#0C0H
  16. MOV P0,#02H ;数码管第2
  17. MOV P2,#0E0H
  18. MOV P0,#0F9H ;显示1
  19. ACALL DELAY
  20. MOV P2,#0C0H
  21. MOV P0,#04H ;数码管第3
  22. MOV P2,#0E0H
  23. MOV P0,#0A4H ;显示2
  24. ACALL DELAY
  25. MOV P2,#0C0H
  26. MOV P0,#08H ;数码管第4
  27. MOV P2,#0E0H
  28. MOV P0,#0B0H ;显示3
  29. ACALL DELAY
  30. MOV P2,#0C0H
  31. MOV P0,#10H ;数码管第5
  32. MOV P2,#0E0H
  33. MOV P0,#99H ;显示4
  34. ACALL DELAY
  35. MOV P2,#0C0H
  36. MOV P0,#20H ;数码管第6
  37. MOV P2,#0E0H
  38. MOV P0,#92H ;显示5
  39. ACALL DELAY
  40. MOV P2,#0C0H
  41. MOV P0,#40H ;数码管第7
  42. MOV P2,#0E0H
  43. MOV P0,#82H ;显示6
  44. ACALL DELAY
  45. MOV P2,#0C0H
  46. MOV P0,#80H ;数码管第8
  47. MOV P2,#0E0H
  48. MOV P0,#0F8H ;显示7
  49. ACALL DELAY
  50. AJMP LOOP ;循环显示
  51. DELAY: MOV R5,#01H ;延时功能
  52. F3: MOV R6,#0FH
  53. F2: MOV R7,#0FH
  54. F1: DJNZ R7,F1 ;若为0程序向下执行,若不为0程序跳转到
  55. DJNZ R6,F2
  56. DJNZ R5,F3
  57. RET
  58. END

实验三:按键实验

实验目的:

        1、熟悉按键原理图;

        2、在理解按键原理图的基础上,汇编编程实现按键控制发光二极管、蜂鸣器和数码管的功能。

实现功能:

        1、按键S7按下,LED1点亮;

        2、按键S6按下,计数加一,并将计数值显示在数码管首位;

        3、按键S5按下,蜂鸣器响起;

        4、按键S4按下,实现一个周期的流水灯。

具体代码:

  1. ORG 0000H
  2. AJMP MAIN
  3. ORG 0030H
  4. MAIN:
  5. MOV P2, #80H ;初始化LED
  6. MOV P0, #0FFH
  7. MOV P2, #0A0H ;初始化蜂鸣器
  8. MOV P0, #00H
  9. MOV P2, #00H
  10. MOV R4, #00H ;初始化计数器
  11. MOV R3, #00H
  12. LOOP1:
  13. MOV P2, #80H
  14. MOV P0, #0FFH
  15. JB P3.0, LOOP2 ;判断S7按键是否按下,若按下则顺序执行,否则跳转
  16. MOV P2, #80H ;实现功能:LED1
  17. MOV P0, #0FEH
  18. LOOP2:
  19. MOV P2, #80H
  20. MOV P0, #0FFH
  21. JB P3.1, LOOP3 ;判断S6按键是否按下,若按下则顺序执行,否则跳转
  22. INC R4 ;计数器R4加一
  23. AJMP FUNC1
  24. FUNC1:
  25. CJNE R4, #0AH, FUNC2 ;判断R4寄存器中的数是否等于10,若相等则跳转,不相等则顺序执行
  26. MOV R4, #00H ;计数器R4清零
  27. FUNC2:
  28. MOV P2, #0C0H
  29. MOV P0, #80H ;选通数码管第一位
  30. MOV DPTR, #TAB ;读码表
  31. MOV A, R4 ;计数值移入寄存器A
  32. MOVC A, @A+DPTR
  33. MOV P2, #0E0H ;数码管段选
  34. MOV P0, A ;移入数值
  35. JB P3.1, LOOP3
  36. AJMP FUNC2
  37. LOOP3:
  38. MOV P2, #80H ;初始化LED
  39. MOV P0, #0FFH
  40. JB P3.2, LOOP4 ;判断S5按键是否按下,若按下则顺序执行,否则跳转
  41. MOV P2,#0A0H ;打开蜂鸣器
  42. SETB P0.6
  43. LOOP4:
  44. JB P3.3, LOOP1 ;判断S4按键是否按下,若按下则顺序执行,否则跳转
  45. MOV R3,#08H ;计数器R3填入初值
  46. MOV A,#0FEH
  47. AJMP LOOP5
  48. LOOP5: ;实现一次流水灯功能
  49. MOV P2, #80H
  50. MOV P0, A
  51. ACALL DELAY
  52. ACALL DELAY
  53. MOV P0, #00H
  54. RL A
  55. DJNZ R3, LOOP5
  56. JMP LOOP1
  57. TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;共阳码表0~9
  58. DELAY: MOV R5,#04H ;延时功能
  59. F3: MOV R6,#0FFH
  60. F2: MOV R7,#0FFH
  61. F1: DJNZ R7,F1 ;若为 0 程序向下执行,若不为 0 程序跳转到
  62. DJNZ R6,F2
  63. DJNZ R5,F3
  64. RET

实验四:外部中断实验

实验目的:

        1、熟悉外部中断原理;

        2、设计并实现中断的控制以及中断程序的编写。

实现功能:

        1、主程序为数码管三段横杆循环亮灭;

        2、按下S5跳入外部中断0程序,实现功能:LED流水灯,循环两次;

        3、按下S4跳入外部中断1程序,实现功能:数码管段循环点亮,循环两次。

具体代码:

  1. ORG 0000H
  2. AJMP MAIN
  3. ORG 0003H ;外部中断0入口地址
  4. AJMP OUT0
  5. ORG 0013H ;外部中断1入口地址
  6. AJMP OUT1
  7. ORG 0030H
  8. MAIN:
  9. MOV P2,#0A0H ;关闭蜂鸣器
  10. CLR P0.6
  11. MOV P2,#80H ;关闭LED
  12. MOV P0,#0FFH
  13. MOV P2,#00H ;初始化P2
  14. SETB EA ;允许总中断
  15. SETB EX0 ;允许外部中断0
  16. SETB EX1 ;允许外部中断1
  17. SETB IT0 ;设置外部中断0边沿触发方式
  18. SETB IT1 ;设置外部中断1边沿触发方式
  19. SETB IP.0 ;设置外部中断0优先级控制
  20. MOV A,#07H
  21. LOOP: ;主程序
  22. MOV R0,#00H ;初始化计数器
  23. MOV R2,#10H
  24. MOV P2,#0C0H ;数码管位选
  25. MOV P0,A
  26. MOV P2,#0E0H ;数码管段选
  27. MOV P0,#0BFH ;显示一条横杆
  28. ACALL DELAY
  29. ACALL DELAY
  30. MOV P2,#0C0H ;数码管位选清零
  31. MOV P0,#00H
  32. RL A ;左移一位
  33. AJMP LOOP
  34. OUT0:
  35. MOV R4,#03H ;设置循环次数
  36. MARK1:
  37. DJNZ R4,LOOP1
  38. RETI ;中断返回
  39. LOOP1:
  40. MOV P2,#80H ;实现功能:LED流水灯
  41. MOV P0,#0FEH
  42. ACALL DELAY
  43. MOV P0,#0FDH
  44. ACALL DELAY
  45. MOV P0,#0FBH
  46. ACALL DELAY
  47. MOV P0,#0F7H
  48. ACALL DELAY
  49. MOV P0,#0EFH
  50. ACALL DELAY
  51. MOV P0,#0DFH
  52. ACALL DELAY
  53. MOV P0,#0BFH
  54. ACALL DELAY
  55. MOV P0,#7FH
  56. ACALL DELAY
  57. AJMP MARK1 ;跳转回标志一
  58. OUT1:
  59. MOV R4,#03H ;设置循环次数
  60. MARK2:
  61. DJNZ R4,LOOP2
  62. RETI
  63. LOOP2:
  64. MOV P2,#0C0H ;实现功能:数码管段循环点亮
  65. MOV P0,#0FFH
  66. MOV P2,#0E0H
  67. MOV P0,#0FEH
  68. ACALL DELAY
  69. MOV P0,#0FDH
  70. ACALL DELAY
  71. MOV P0,#0FBH
  72. ACALL DELAY
  73. MOV P0,#0F7H
  74. ACALL DELAY
  75. MOV P0,#0EFH
  76. ACALL DELAY
  77. MOV P0,#0DFH
  78. ACALL DELAY
  79. AJMP MARK2 ;跳转回标志二
  80. DELAY:MOV R5,#05H ;延时功能
  81. F3: MOV R6,#0FFH
  82. F2: MOV R7,#0FFH
  83. F1: DJNZ R7,F1
  84. DJNZ R6,F2
  85. DJNZ R5,F3
  86. RET
  87. END

实验五:定时器实验

实验目的:

        1、熟悉定时器工作以及中断原理;

        2、实现定时控制,定时溢出引发定时中断控制蜂鸣器、发光二极管或数码管等功能。

实现功能:

        实现简单的秒表功能,具体如下:

        1、数码管由左至右依次显示:横杠、空位、秒表十位、秒表个位(带小数点)、秒表100ms位、秒表10ms位(只显示5和0);

        2、按键S7按下,开始计时;

        3、按键S6按下,暂停计时;

        4、按键S5按下,秒表清零。

具体代码:

  1. ORG 0000H
  2. AJMP MAIN
  3. ORG 001BH
  4. AJMP SER ;中断程序
  5. ORG 0060H
  6. MAIN:
  7. MOV R1,#00H ;初始化计数器R1,作秒表个位,下面同理
  8. MOV R2,#00H ;秒表十位
  9. MOV R3,#00H ;秒表10ms位,只显示50
  10. MOV R4,#00H ;秒表100ms位
  11. MOV TMOD,#10H ;定时器工作模式一
  12. MOV TH1,#3CH ;赋初始值
  13. MOV TL1,#0B0H
  14. SETB EA ;打开总中断
  15. SETB ET1 ;打开定时器1
  16. LOOP:
  17. MOV P2,#0C0H ;打开数码管选位端
  18. MOV P0,#01H ;数码管位一
  19. MOV P2,#0E0H ;数码管显数端
  20. MOV P0,#0BFH ;显示一条横杠“-”
  21. ACALL DELAY ;调用延时功能
  22. MOV P0,#00H
  23. MOV P2,#00H
  24. MOV P2,#0C0H
  25. MOV P0,#04H ;数码管位三
  26. MOV A,R2 ;将十位数值赋值到累加器A
  27. MOV DPTR,#TAB1 ;读取码表TAB1
  28. MOVC A,@A+DPTR
  29. MOV P2,#0E0H
  30. MOV P0,A
  31. ACALL DELAY
  32. MOV P2,#00H
  33. MOV P2,#0C0H
  34. MOV P0,#08H ;数码管位四
  35. MOV A,R1 ;将个位数值赋值到累加器A
  36. MOV DPTR,#TAB2 ;读取码表TAB2
  37. MOVC A,@A+DPTR
  38. MOV P2,#0E0H
  39. MOV P0,A
  40. ACALL DELAY
  41. MOV P2,#00H
  42. MOV P2,#0C0H
  43. MOV P0,#10H ;数码管位五
  44. MOV A,R4 ;将100ms位的数值赋值到累加器A
  45. MOV DPTR,#TAB1
  46. MOVC A,@A+DPTR
  47. MOV P2,#0E0H
  48. MOV P0,A
  49. ACALL DELAY
  50. MOV P2,#00H
  51. MOV P2,#0C0H
  52. MOV P0,#20H ;数码管位六
  53. MOV A,R3 ;将10ms位的数值赋值到累加器A
  54. MOV DPTR,#TAB3
  55. MOVC A,@A+DPTR
  56. MOV P2,#0E0H
  57. MOV P0,A
  58. ACALL DELAY
  59. MOV P2,#00H
  60. MOV P2,#0C0H
  61. MOV P0,#80H ;数码管位八
  62. MOV P2,#0E0H
  63. MOV P0,#0BFH ;显示一条横杠“-”
  64. ACALL DELAY
  65. MOV P0,#00H ;清零P0
  66. MOV P2,#00H ;清零P2
  67. JNB P3.0,BIN1 ;扫描独立按键
  68. JNB P3.1,BIN2
  69. JNB P3.2,BIN3
  70. AJMP LOOP
  71. SER:
  72. INC R3 ;每跳入一次中断,过了50ms,增加一次R3
  73. CJNE R3,#02H,F ;若R3等于2,即过100ms,则清零R3并增加R4
  74. MOV R3,#00H
  75. INC R4
  76. CJNE R4,#0AH,F ;若R4等于10,即过了1s,则清零R4并增加R1
  77. MOV R4,#00H
  78. INC R1
  79. CJNE R1,#0AH,F ;若R1等于10,即过了10s,则清零R1并增加R2
  80. MOV R1,#00H
  81. INC R2
  82. CJNE R2,#0AH,F ;若R2等于10,即过了100s,则清零R2
  83. MOV R2,#00H
  84. F:
  85. MOV TH1,#3CH ;重新赋值
  86. MOV TL1,#0B0H
  87. RETI;中断返回
  88. BIN1:
  89. SETB TR1 ;打开定时器
  90. AJMP LOOP
  91. BIN2:
  92. CLR TR1 ;停止定时器
  93. AJMP LOOP
  94. BIN3:
  95. MOV R1,#00H ;按键功能:计时清零
  96. MOV R2,#00H
  97. MOV R3,#00H
  98. MOV R4,#00H
  99. AJMP LOOP
  100. TAB1:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;数码管0~9
  101. TAB2:DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H ;数码管0~9带小数点位
  102. TAB3:DB 0C0H,92H ;数码管05
  103. DELAY: MOV R5,#01H ;延时功能
  104. F3: MOV R6,#0FH
  105. F2: MOV R7,#0FH
  106. F1: DJNZ R7,F1
  107. DJNZ R6,F2
  108. DJNZ R5,F3
  109. RET
  110. END

实验六:串口通信实验

实验目的:

        1、熟悉串行通信原理;

        2、实现串行发送、串行接收,并将发送或接收的内容通过发光二极管或数码管。

6.1 串口发送

实现功能:

        1、在20H~2AH存入数据"HELLO-WORLD"的字母数码管段显数据;

        2、在数码管上显示出HELLO-WORLD,具体方式为:

                数码管状态1:【HELLO-WO】;

                数码管状态2:【ELLO-WOR】;

                数码管状态3:【LLO-WORL】;

                数码管状态4:【LO-WORLD】;

        上述4个状态循环。并使用串口发送实现。

具体代码:

  1. ORG 0000H
  2. AJMP START
  3. ORG 0023H ;串口中断入口地址
  4. AJMP INTER
  5. ORG 0060H ;主程序起始地址
  6. AUXR EQU 8EH ;AUXR伪指令部分
  7. START:
  8. MOV P2,#0A0H ;选通控制蜂鸣器与继电器
  9. MOV P0,#00H ;关闭蜂鸣器与继电器
  10. MOV P2,#00H
  11. MOV P0,#00H
  12. MOV TMOD,#20H ;0010 0000 M1 M2 = 1 0 选择定时器T1为方式2 自动重装8
  13. MOV TH1,#0E8H ;定时器赋初值
  14. MOV TL1,#0E8H ;设置波特率为1200Baud
  15. SETB TR1 ;打开定时器T1
  16. MOV AUXR,#00H ;定时器1时钟为Fosc/12,即12T
  17. MOV PCON,#00H ;令SMOD=0
  18. MOV SCON,#40H ;0100 0000 SM0 SM1 = 0 1 串行口为方式1
  19. SETB EA ;打开总中断
  20. SETB ES ;打开串口中断
  21. MOV 20H,#89H ;存入数据HELLO-WORLD
  22. MOV 21H,#86H
  23. MOV 22H,#0C7H
  24. MOV 23H,#0C7H
  25. MOV 24H,#0C0H
  26. MOV 25H,#0BFH
  27. MOV 26H,#81H
  28. MOV 27H,#0C0H
  29. MOV 28H,#88H
  30. MOV 29H,#0C7H
  31. MOV 2AH,#0C0H
  32. MOV A,@R0; ;(A)=R0
  33. MOV SBUF,A; ;发送数据
  34. SJMP $ ;等待中断
  35. INTER:
  36. Send:
  37. MOV P2,#0C0H
  38. MOV P0,#01H ;数码管第1
  39. MOV P2,#0E0H
  40. MOV A,@R0
  41. MOV SBUF,A ;发送数据
  42. MOV P0,A ;数码管显示字母
  43. ACALL DELAY
  44. INC R0 ;R01
  45. MOV P2,#0C0H
  46. MOV P0,#02H ;数码管第2
  47. MOV P2,#0E0H
  48. MOV A,@R0
  49. MOV SBUF,A
  50. MOV P0,A
  51. ACALL DELAY
  52. INC R0
  53. MOV P2,#0C0H
  54. MOV P0,#04H ;数码管第3
  55. MOV P2,#0E0H
  56. MOV A,@R0
  57. MOV SBUF,A
  58. MOV P0,A
  59. ACALL DELAY
  60. INC R0
  61. MOV P2,#0C0H
  62. MOV P0,#08H ;数码管第4
  63. MOV P2,#0E0H
  64. MOV A,@R0
  65. MOV SBUF,A
  66. MOV P0,A
  67. ACALL DELAY
  68. INC R0
  69. MOV P2,#0C0H
  70. MOV P0,#10H ;数码管第5
  71. MOV P2,#0E0H
  72. MOV A,@R0
  73. MOV SBUF,A
  74. MOV P0,A
  75. ACALL DELAY
  76. INC R0
  77. MOV P2,#0C0H
  78. MOV P0,#20H ;数码管第6
  79. MOV P2,#0E0H
  80. MOV A,@R0
  81. MOV SBUF,A
  82. MOV P0,A
  83. ACALL DELAY
  84. INC R0
  85. MOV P2,#0C0H
  86. MOV P0,#40H ;数码管第7
  87. MOV P2,#0E0H
  88. MOV A,@R0
  89. MOV SBUF,A
  90. MOV P0,A
  91. ACALL DELAY
  92. INC R0
  93. MOV P2,#0C0H
  94. MOV P0,#80H ;数码管第8
  95. MOV P2,#0E0H
  96. MOV A,@R0
  97. MOV SBUF,A
  98. MOV P0,A
  99. ACALL DELAY
  100. INC R3
  101. JU1:CJNE R3,#040H,JU2 ;跳入串口中断4次后跳转,否则顺序执行
  102. INC R4 ;R41
  103. MOV R3,#00H ;清零R3
  104. JU2:CJNE R4,#00H,JU3 ;R40时顺序执行,否则跳转
  105. MOV R0,#20H ;从20H开始发送
  106. JU3:CJNE R4,#01H,JU4 ;R41时顺序执行,否则跳转
  107. MOV R0,#21H ;从21H开始发送
  108. JU4:CJNE R4,#02H,JU5 ;R42时顺序执行,否则跳转
  109. MOV R0,#22H ;从22H开始发送
  110. JU5:CJNE R4,#03H,JU6 ;R43时顺序执行,否则跳转
  111. MOV R0,#23H ;从23H开始发送
  112. JU6:CJNE R4,#04H,J ;R44时顺序执行,否则跳转
  113. MOV R0,#00H ;清零R0和R4
  114. MOV R4,#00H
  115. J: RETI ;中断返回
  116. DELAY:
  117. MOV R5,#01H ;延时功能
  118. F3: MOV R6,#0FH
  119. F2: MOV R7,#0FFH
  120. F1: DJNZ R7,F1 ;若为0程序向下执行,若不为0程序跳转到
  121. DJNZ R6,F2
  122. DJNZ R5,F3
  123. RET
  124. END

6.2 串口接收

实现功能:

        1、借助STC驱动软件的串口助手,设定好多字符传送的内容,使用单片机接收,并将接收到的数据内容显示到数码管上。

具体代码:

  1. ORG 0000H
  2. AJMP START
  3. ORG 0023H ;串口中断入口地址
  4. AJMP INTER
  5. ORG 0060H ;主程序起始地址
  6. AUXR EQU 8EH ;AUXR伪指令部分
  7. START:
  8. ;系统初始化
  9. MOV P2,#0A0H ;选通控制蜂鸣器与继电器
  10. MOV P0,#00H ;关闭蜂鸣器与继电器
  11. MOV P2,#00H ;清零P2
  12. MOV P0,#00H ;清零P0
  13. MOV TMOD,#20H ;0010 0000 M1 M2 = 1 0 选择定时器T1为方式2 自动重装8
  14. MOV TH1,#0E8H ;定时器赋初值
  15. MOV TL1,#0E8H ;设置波特率为1200Baud
  16. SETB TR1 ;打开定时器T1
  17. MOV AUXR,#00H ;定时器1时钟为Fosc/12,即12T
  18. MOV PCON,#00H ;令SMOD=0
  19. MOV SCON,#40H ;0100 0000 SM0 SM1 = 0 1 串行口为方式1
  20. SETB EA ;打开总中断
  21. SETB ES ;打开串口中断
  22. MOV R0,#20H;
  23. MOV R2,#8
  24. SETB REN ;启动接受允许位
  25. MOV A,SBUF
  26. SJMP $ ;等待中断
  27. REC:
  28. CLR RI ;接收完清零RI
  29. MOV A,SBUF ;读取接收的数据
  30. MOV P2,#0C0H ;选通控制数码管位选
  31. MOV P0,#01H
  32. MOV P2,#0E0H ;选通控制数码管段选
  33. MOV P0,A ;(P0)=(A)
  34. MOV P2,#00H ;清零P2
  35. MOV P0,#00H ;清零P0
  36. RETI
  37. DELAY:
  38. MOV R5,#0FH ;延时功能
  39. F3: MOV R6,#0FH
  40. F2: MOV R7,#0FFH
  41. F1: DJNZ R7,F1 ;若为0程序向下执行,若不为0程序跳转到
  42. DJNZ R6,F2
  43. DJNZ R5,F3
  44. RET
  45. END

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/554386
推荐阅读
相关标签
  

闽ICP备14008679号