单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:3597|回复:5
打印上一主题下一主题

STC15W204S STC15W201S单片机P3.0 P3.1串口汇编程序

[复制链接]
跳转到指定楼层
楼主
ID:261025发表于 2021-1-24 12:25|只看该作者|只看大图回帖奖励
网上找不到STC15W204S STC15W201S 的串口汇编程序 STC提供的范例程序也没用  琢磨了一天才会使用P3.0P3.1串口 现在把程序分享出来用  串口助手软件发送1 返回文本123456789


单片机源程序如下:
  1. //本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
  2. //若无特别说明,工作频率一般为11.0592MHz


  3. ;#define NONE_PARITY     0     //无校验
  4. ;#define ODD_PARITY     1     //奇校验
  5. ;#define EVEN_PARITY     2     //偶校验
  6. ;#define MARK_PARITY     3     //标记校验
  7. ;#define SPACE_PARITY   4     //空白校验

  8. ;#define PARITYBIT NONE_PARITY   //定义校验位

  9. //-----------------------------------------

  10. ;P0M1   DATA   0x93         ; P0M1.n,P0M0.n     =00--->Standard,   01--->push-pull
  11. ;P0M0   DATA   0x94         ;             =10--->pure input,  11--->open drain
  12. P1M1   DATA   0x91         ; P1M1.n,P1M0.n     =00--->Standard,   01--->push-pull
  13. P1M0   DATA   0x92         ;             =10--->pure input,  11--->open drain
  14. ;P2M1   DATA   0x95         ; P2M1.n,P2M0.n     =00--->Standard,   01--->push-pull
  15. ;P2M0   DATA   0x96         ;             =10--->pure input,  11--->open drain
  16. P3M1   DATA   0xB1         ; P3M1.n,P3M0.n     =00--->Standard,   01--->push-pull
  17. P3M0   DATA   0xB2         ;             =10--->pure input,  11--->open drain
  18. ;P4M1   DATA   0xB3         ; P4M1.n,P4M0.n     =00--->Standard,   01--->push-pull
  19. ;P4M0   DATA   0xB4         ;             =10--->pure input,  11--->open drain
  20. P5M1   DATA   0xC9         ; P5M1.n,P5M0.n     =00--->Standard,   01--->push-pull
  21. P5M0   DATA   0xCA         ;             =10--->pure input,  11--->open drain
  22. P5     EQU     0C8H;
  23. ;P6M1   DATA   0xCB         ; P6M1.n,P6M0.n     =00--->Standard,   01--->push-pull
  24. ;P6M0   DATA   0xCC         ;             =10--->pure input,  11--->open drain
  25. ;P7M1   DATA   0xE1         ;
  26. ;P7M0   DATA   0xE2         ;

  27. AUXR       EQU     08EH       //辅助寄存器
  28. T2H       DATA   0D6H       //定时器2高8位
  29. T2L       DATA   0D7H       //定时器2低8位

  30. P_SW1     EQU     0A2H       //外设功能切换寄存器1
  31. S1_S0     EQU     40H       //P_SW1.6
  32. S1_S1     EQU     80H       //P_SW1.7

  33. BUSY       BIT 20H.0         //忙标志位
  34. //-----------------------------------------
  35.    ORG   0000H
  36.    LJMP  MAIN

  37.    ORG   0023H
  38.    LJMP  UART_ISR
  39. //-----------------------------------------
  40.    ORG   0100H
  41. MAIN:
  42.    CLR     A
  43. ;   MOV     P0M1, A     ;设置为准双向口
  44. ;   MOV     P0M0, A
  45.    MOV     P1M1, A     ;设置为准双向口
  46.    MOV     P1M0, A
  47. ;   MOV     P2M1, A     ;设置为准双向口
  48. ;   MOV     P2M0, A
  49.    MOV     P3M1, A     ;设置为准双向口
  50.    MOV     P3M0, A
  51. ;   MOV     P4M1, A     ;设置为准双向口
  52. ;   MOV     P4M0, A
  53.    MOV     P5M1, A     ;设置为准双向口
  54.    MOV     P5M0, A
  55. ;   MOV     P6M1, A     ;设置为准双向口
  56. ;   MOV     P6M0, A
  57. ;   MOV     P7M1, A     ;设置为准双向口
  58. ;   MOV     P7M0, A

  59.    CLR   BUSY;
  60.    CLR   EA;
  61.    MOV   SP,#3FH;
  62.   
  63.    MOV   A,P_SW1;
  64.    ANL   A,#03FH;           //S1_S0=0 S1_S1=0
  65.    MOV   P_SW1,A;           //(P3.0/RxD, P3.1/TxD)

  66. //-------------------------------
  67.    MOV SCON,#50H     ;     //8位可变波特率
  68.        ORL AUXR,#04H           ;定时器2时钟为Fosc,即1T
  69.    ORL AUXR,#01H     ;串口1选择定时器2为波特率发生器       9600
  70.        MOV T2L,#0E0H           ;设定定时初值       9600
  71.        MOV T2H,#0FEH           ;设定定时初值
  72.        ORL AUXR,#10H           ;启动定时器2

  73.        SETB  ES;               //使能串口中断
  74.    SETB  EA;
  75.        SJMP  $
  76. TXDAT:      
  77.        MOV   DPTR,#TESTSTR;       //发送测试字符串
  78.        MOV  R4,#9;                            
  79.        LCALL TABS;     查表      
  80.        RETI                
  81.   ;  SJMP  $
  82. ;-----------------------------------------
  83. TESTSTR:
  84.    DB  "123456789"
  85. ;/*----------------------------
  86. ;UART 中断服务程序
  87. ;----------------------------*/
  88. UART_ISR:
  89.    PUSH  ACC;
  90.    PUSH  PSW;
  91.    JNB   RI,CHECKTI;         //检测RI位
  92.    CLR   RI;               //清除RI位
  93.    MOV   A,SBUF;           //P0显示串口数据
  94.    CJNE A,#1,RXOUT;
  95.    LJMP TXDAT;
  96. CHECKTI:
  97.    JNB   TI,ISR_EXIT;         //检测TI位
  98.    CLR   TI;               //清除TI位
  99.    CLR   BUSY;             //清忙标志
  100. ISR_EXIT:
  101.    POP   PSW;
  102.    POP   ACC;        
  103. RXOUT:  
  104.    RETI;

  105. ;/*----------------------------
  106. ;发送串口数据
  107. ;----------------------------*/
  108. SENDDATA:  
  109.    SETB BUSY;
  110.    MOV SBUF,A;           //写数据到UART数据寄存器
  111.        JNB TI,$;
  112.    CLR TI;
  113.    RET;
  114. ;/*----------------------------
  115. ;发送字符串
  116. //------------------------------------------------------------------------------              
  117. TABS:                
  118. DDD:         CLR  A;
  119.            MOVC A,@A+DPTR;
  120.                  INC  DPTR;
  121.                        LCALL SENDDATA;           //发送当前字符                  
  122.            DJNZ R4,DDD;
  123.            RET;

  124.    END;
复制代码

以上资料51hei提供下载:
15W204S串口测试程序 - 汇编.rar(22.27 KB, 下载次数: 29)

评分

黑币 +65
收起理由
+ 15
很给力!
+ 50
共享资料的黑币奖励!

查看全部评分

沙发
ID:1062327发表于 2023-2-7 13:43|只看该作者
你好!请问   ANL   A,#03FH;           //S1_S0=0 S1_S1=0 这是起什么作用的?
板凳
ID:261025发表于 2023-2-8 21:17|只看该作者
gaof 发表于 2023-2-7 13:43
你好!请问   ANL   A,#03FH;           //S1_S0=0 S1_S1=0 这是起什么作用的?

选择P3.0 P3.1为串口
看图  在S1_S1和S1_0等于0时 P3.0 P3.1为串口  二进制是00111111  16进制是3FH

51hei截图20230208211332.jpg(28.31 KB, 下载次数: 66)

51hei截图20230208211332.jpg
地板
ID:261025发表于 2023-2-8 22:05来自手机|只看该作者
gaof 发表于 2023-2-7 13:43
你好!请问   ANL   A,#03FH;           //S1_S0=0 S1_S1=0 这是起什么作用的?

  
P_SW1     EQU     0A2H       //外设功能切换寄存器1
S1_S0     EQU     40H       //P_SW1.6
S1_S1     EQU     80H       //P_SW1.7


MOV   A,P_SW1;
ANL   A,#03FH;           //S1_S0=0 S1_S1=0
MOV   P_SW1,A;           //(P3.0/RxD, P3.1/TxD)

我的理解是  P_SW1=0A2H=000 10100010
                         03FH=000 00111111

MOV   A,P_SW1;
ANL   A,#03FH;     运算后得到 00100010   与运算:0&0=0 1&0=0 1&1=1 0&1=0
MOV   P_SW1,A;
5#
ID:1062327发表于 2023-2-9 17:08|只看该作者
我想用这个改为按键控制串口发!发数据时让某个引脚拉低发完后再拉高,不需要接受那位大神帮忙看看,
6#
ID:73992发表于 2024-3-8 00:09|只看该作者
例程很好,

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网