Proteus 微控制器 8051 输出频率为 12 MHz 的错误信号

Proteus microcontroller 8051 output wrong signal with frequency 12 MHz

如何将此描述应用于我的 8051 微控制器?

原理图捕获

以及 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