Proteus 微控制器 8051 输出频率为 12 MHz 的错误信号
Proteus microcontroller 8051 output wrong signal with frequency 12 MHz
如何将此描述应用于我的 8051 微控制器?
- 传输速度:V_pd=62500波特;
- 石英谐振器的时钟频率:f_CLK = 12 MHz;
- 使用UART模块进行分享;
- 传输模式-异步;
- 数据字长 - 8 位;
- 使用奇偶校验;
- 停止位数 - 1;
- 传输字节:01100010b;
- ASCII - 接收符号 - g,
- SMOD = 1.
原理图捕获
以及 8051 的此类代码
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:
; Processor: AT89C51
; Compiler: ASEM-51 (Proteus)
;====================================================================
$NOMOD51
$INCLUDE (8051.MCU)
;====================================================================
; DEFINITIONS
;====================================================================
;====================================================================
; VARIABLES
;====================================================================
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
; Reset Vector
org 0000h
jmp Start
;====================================================================
; CODE SEGMENT
;====================================================================
org 0100h
Start:
; Write your code here
Loop:
MOV P1, #11111111b ;
;
;
;
CLR TCON.6 ;
CLR IE.3 ;
CLR IE.4 ;
MOV TH1,#11111111b ;
;
MOV SCON,#11010000b ;
MOV A, PCON ; A <- PCON
ANL A, #01111111b ; A <- A & 01111111b
MOV PCON, A ; PCON <- A
MOV TMOD,#00100000b ;
SETB TCON.6
CIN: JNB RI,CIN
MOV P2,#67h;,SBUF ;
CLR RI ;
;
MOV P2, #00h ;
MOV A, P1 ;
MOV P2, A ;
JB PSW.0, TransmitedNumberIsOdd
JNB PSW.0, TransmiteNumberIsEven
TransmitedNumberIsOdd:
SETB SCON.3 ;
jmp Transmit
TransmiteNumberIsEven:
jmp Transmit
Transmit:
MOV SBUF,#62h;, A ;
COUT: JNB TI, COUT ;
;
CLR TI ;
CLR SCON.3 ;
JB SCON.2, RecievedNumberIsOdd
JNB SCON.2, RecievedNumberIsEven
RecievedNumberIsOdd:
MOV SBUF, #11111111b ;
Odd: JNB TI, Odd ;
;
CLR TI ;
jmp Loop
RecievedNumberIsEven:
MOV SBUF, #00000000b ;
Even: JNB TI, Even ;
;
CLR TI ;
jmp Loop
;====================================================================
END
- 在这张图片中它应该是这样的
频率6Mhz,波特率110
的数字示波器和虚拟终端
proteus 项目:
https://drive.google.com/file/d/1sut0LtCkS8FWwoV0OHSX1DOVpofnLhBv/view?usp=sharing
- 我的错误输出
频率12Mhz,波特率62500
的数字示波器和虚拟终端
我的proteus项目:
(包含文件 (https://drive.google.com/file/d/15eZg-abC3D0JzOlOkteOTFVmLKMddLYL/view?usp=sharing))
您必须对代码进行一些更改
setb ACC.7 insted of ANL A,#01111111b
8051波特率计算器
http://www.keil.com/products/c51/baudrate.asp
按钮
enter image description here
当你点击开始vsm调试时
添加停止点并在数字示波器上获取信号。
然后旋转这个
enter image description here
并获得信号。
最终输出
enter image description here
如何将此描述应用于我的 8051 微控制器?
- 传输速度:V_pd=62500波特;
- 石英谐振器的时钟频率:f_CLK = 12 MHz;
- 使用UART模块进行分享;
- 传输模式-异步;
- 数据字长 - 8 位;
- 使用奇偶校验;
- 停止位数 - 1;
- 传输字节:01100010b;
- ASCII - 接收符号 - g,
- SMOD = 1.
原理图捕获
以及 8051 的此类代码
;====================================================================
; Main.asm file generated by New Project wizard
;
; Created:
; Processor: AT89C51
; Compiler: ASEM-51 (Proteus)
;====================================================================
$NOMOD51
$INCLUDE (8051.MCU)
;====================================================================
; DEFINITIONS
;====================================================================
;====================================================================
; VARIABLES
;====================================================================
;====================================================================
; RESET and INTERRUPT VECTORS
;====================================================================
; Reset Vector
org 0000h
jmp Start
;====================================================================
; CODE SEGMENT
;====================================================================
org 0100h
Start:
; Write your code here
Loop:
MOV P1, #11111111b ;
;
;
;
CLR TCON.6 ;
CLR IE.3 ;
CLR IE.4 ;
MOV TH1,#11111111b ;
;
MOV SCON,#11010000b ;
MOV A, PCON ; A <- PCON
ANL A, #01111111b ; A <- A & 01111111b
MOV PCON, A ; PCON <- A
MOV TMOD,#00100000b ;
SETB TCON.6
CIN: JNB RI,CIN
MOV P2,#67h;,SBUF ;
CLR RI ;
;
MOV P2, #00h ;
MOV A, P1 ;
MOV P2, A ;
JB PSW.0, TransmitedNumberIsOdd
JNB PSW.0, TransmiteNumberIsEven
TransmitedNumberIsOdd:
SETB SCON.3 ;
jmp Transmit
TransmiteNumberIsEven:
jmp Transmit
Transmit:
MOV SBUF,#62h;, A ;
COUT: JNB TI, COUT ;
;
CLR TI ;
CLR SCON.3 ;
JB SCON.2, RecievedNumberIsOdd
JNB SCON.2, RecievedNumberIsEven
RecievedNumberIsOdd:
MOV SBUF, #11111111b ;
Odd: JNB TI, Odd ;
;
CLR TI ;
jmp Loop
RecievedNumberIsEven:
MOV SBUF, #00000000b ;
Even: JNB TI, Even ;
;
CLR TI ;
jmp Loop
;====================================================================
END
proteus 项目: https://drive.google.com/file/d/1sut0LtCkS8FWwoV0OHSX1DOVpofnLhBv/view?usp=sharing
我的proteus项目: (包含文件 (https://drive.google.com/file/d/15eZg-abC3D0JzOlOkteOTFVmLKMddLYL/view?usp=sharing))
您必须对代码进行一些更改
setb ACC.7 insted of ANL A,#01111111b
8051波特率计算器 http://www.keil.com/products/c51/baudrate.asp
按钮
enter image description here
当你点击开始vsm调试时 添加停止点并在数字示波器上获取信号。 然后旋转这个
enter image description here
并获得信号。
最终输出
enter image description here