数码之家

 找回密码
 立即注册
搜索
查看: 2460|回复: 10

[C51] 找一个STC15汇编头文件

[复制链接]
发表于 2020-3-15 17:53:12 来自手机浏览器 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用的单片机STC15W408AS,以前一直用C写,在keil中直接include stc15.h即可,
最近想用汇编,查了下居然找不到头文件,有知道的坛友指点下
发表于 2020-3-15 20:41:30 | 显示全部楼层
汇编你还要啥头文件,直接开始写就行了
回复 支持 反对

使用道具 举报

发表于 2020-3-15 22:14:43 | 显示全部楼层
renpeng009 发表于 2020-3-15 20:41
汇编你还要啥头文件,直接开始写就行了

你应该没用过汇编吧
回复 支持 反对

使用道具 举报

发表于 2020-3-16 13:29:43 | 显示全部楼层
chinawph 发表于 2020-3-15 22:14
你应该没用过汇编吧

那你可猜错了
回复 支持 反对

使用道具 举报

发表于 2020-3-16 14:35:45 | 显示全部楼层
给你一个我的工程,寄存器定义是我自己搞出来的,你看看合不合你的习惯:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-16 14:58:01 | 显示全部楼层
在文件开头输入 #include "STC15.inc"
然后把这个文件放在工程里即可。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-17 10:00:43 来自手机浏览器 | 显示全部楼层
la45088d1 发表于 2020-3-16 14:35
给你一个我的工程,寄存器定义是我自己搞出来的,你看看合不合你的习惯:



谢谢大佬
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-17 11:59:19 来自手机浏览器 | 显示全部楼层
hefanghua 发表于 2020-3-16 14:58
在文件开头输入 #include "STC15.inc"
然后把这个文件放在工程里即可。

谢谢大佬
回复 支持 反对

使用道具 举报

发表于 2020-3-17 12:31:06 | 显示全部楼层
从没用过C语言,不懂什么叫头文件。 如果是汇编,那估计你说的头文件就是寄存器定义。
下面贴上我自己编的,可参考下。
----------------------------------------------------------------------------------------------------
;下面是寄存器的分配使用

  ;字节20H的前4位用作18b20的存在标示位 。位00H,01H,02H,03H
  ;字节20H的后4位用作正负温度标志  位04H,05H,06H,07H

   TPH1 EQU 24H            ;存放温度值的高字节
   TPL1 EQU 25H            ;存放温度值的低字节
   TTH1 EQU 26H            ;合并成完整的温度整数\
   TTL1 EQU 27H            ;合并成完整的温度整数




  DQ1  BIT P1.5      ;第一个DS18B20的数据口位

  DQ2 BIT P1.4      ;第二个DS18B20的数据口位

  LCDSX1 BIT 0FH    ;字节21H的第1位做调试显示标志


     TSRAM0 EQU 2CH         ;定时器计数用的寄存器0
     TSRAM1 EQU 2DH         ;定时器计数用的寄存器1
     TSRAM2 EQU 2EH         ;定时器计数用的寄存器1
     TSRAM3 EQU 2FH          ;定时器计数用的寄存器1
     TSRAM4 EQU 30H          ;定时器计数用的寄存器1

    YSRAM1 EQU 31H       ;延时用寄存器1
    YSRAM2 EQU 32H      ;延时用寄存器2
    YSRAM3 EQU 33H     ; 延时用寄存器3



    S1X EQU 34H   ;第一行显示个位
    S10X EQU 35H  ;第一行显示十位
    S100X EQU 36H  ;第一行显示百位
    S1000X EQU 37H  ;第一行显示千位



    S1XB EQU 38H   ;第二行显示个位
    S10XB EQU 39H   ;第二行显示十位
    S100XB EQU 3AH  ;第二行显示百位
    S1000XB EQU 3BH   ;第二行显示千位
    SS1 EQU 3CH  ;时钟1秒计数

    SS10 EQU 3DH   ;时钟10秒计数
    MM1 EQU 3EH   ;时钟分个位
    MM10 EQU 3FH  ;时钟分十位
    HH1 EQU 40H   ;时钟小时个位
    HH10 EQU 41H  ;时钟小时十位

    RR1 EQU 42H   ;日 个位
    RR10 EQU 43H  ;日十位
    YY1 EQU 44H   ; 月个位
    YY10 EQU 45H ;月十位
    NN1 EQU 46H    ;年个位
    NN10 EQU 47H    ;年十位
    NN100 EQU 48H  ;年百位
    NN1K  EQU 49H  ;年千位
    RY1  EQU 4EH  ;每月日数计算最高限制



     SBUF_R  EQU 4AH    ;串口接收字节计数

     RAM1602 EQU 4BH         ;LCD1602写入缓冲

    ASWRAM1 EQU 4CH    ;按键A 计数
    BSWRAM1 EQU 4DH    ;按键B 计数
    RAM1602B EQU 4EH ;LCD1602 光标移动计数1
    RAM1602C EQU 4FH ;LCD1602 光标移动计数2
    RAM1602X EQU 50H ;LCD1602 光标闪烁


    RS BIT P5.5    ;LCD1602 的 RS端  ,1-数据,0-指令
    RW BIT P5.6    ;LCD1602 的 RW端  ,1-读出,0-写入
    EN BIT P5.4    ;LCD1602 的 E端   ,先从低变高,再变低,以确认输入数据或命令


    LCD1_1 EQU 80H   ;LCD1602的第一行第1个



    LCD2_1 EQU 90H   ;LCD1602的第二行第1个




           ORG 0000H
          LJMP AA1
     ;--------------------------

           ORG 00BH;T0中断入口
           LJMP T0INT


          ORG 0100H
;数值初始化


       AA1:MOV R0,#02H      ;间接寻址,从02H开始到0FFH共256字节   全清空置零
           MOV R1,#255
       CL1:MOV @R0,#00H
           INC R0
           DJNZ R1,CL1
           MOV R0,#00
           MOV R1,#00

      SETB DQ1
      CLR LCDSX1    ;清显示调试标注

       MOV SP,#0E0H;设定堆栈底在RAM的0E0H


       MOV NN1K,#2    ;给年数置2001年
       MOV NN100,#0
       MOV NN10,#2
       MOV NN1,#0

       MOV YY10,#0      ;给月数置 1月
       MOV YY1,#1

       MOV RR10,#0    ;给日数置 1日
       MOV RR1,#1



        ;---------定时器T0初始化--------10毫秒@11.0592MHz
        ANL AUXR,#7FH                ;定时器T0时钟12T模式
        ANL TMOD,#0F0H                ;设置定时器模式
        MOV TL0,#001H                ;设置定时初值 #001H
        MOV TH0,#0DCH                ;设置定时初值 #0DCH
        CLR TF0                        ;清除TF0标志
        SETB TR0                ;定时器0开始计时
        SETB ET0             ;允许T0中断

     ;-------------------------
     ;------定时器T2初始化-------用于串口波特率
     ;晶振-11.0592MHZ
     ;波特率数对应T2重装值
     ;9600----0FEE0H
     ;4800----0FDC0H
     ;2400----0FB80H
     ;1200----0F700H
       MOV T2L,#0E0H    ;波特率9600
       MOV T2H,#0FEH
       MOV AUXR,#15H   ;定时器T2工作1T模式,并开始计时  ;  选择定时器2作串口波特率


    ;-------------------------
      MOV A,AUXR1

      MOV AUXR1,A

      SETB SM0
      SETB SM1   ;串口工作在模式3,9位 ,波特率可变
      SETB  REN   ;*****允许串口接收********
      CLR ES        ;暂停串口中断
        SETB EA            ;中断总开关





  ;---------------------------------------



         ;LCD1602初始化
      MOV RAM1602,#000      ;清P2
      LCALL DELAY15MS     ;延时15毫秒


      MOV RAM1602,#38H             ;16行*2,5*8
      LCALL ZL

      LCALL DELAY5MS       ;延时5毫秒


      MOV RAM1602,#38H             ;16行*2,5*8

      LCALL ZL
      LCALL DELAY5MS       ;延时5毫秒




      MOV RAM1602,#08H         ;关显示
      LCALL ZL
      LCALL DELAY1MS       ;延时1毫秒


      MOV RAM1602,#01H       ;清屏
      LCALL ZL
      LCALL DELAY5MS       ;延时5毫秒


      MOV RAM1602,#06H       ;地址计数器AC自动加1,光标不移动*******
      LCALL ZL     ;
      LCALL DELAY1MS       ;延时1毫秒


      MOV RAM1602,#0CH             ;开显示
       LCALL ZL
      LCALL DELAY1MS       ;延时1毫秒



    ;-----------------------------------

            MOV R0,#80H   ;给80H到09FH都置空格(20H)
            MOV R1,#32    ;32个字符存储字节
       CL2: MOV @R0,#20H
            INC R0
            DJNZ R1,CL2


          MOV ASWRAM1,#00
          MOV BSWRAM1,#00





;运行主程序



      AA2:LCALL DS18B20_1       ;第一路温度测量
           LCALL DS18B20_2
           LCALL DS1820_JH





           LCALL T_SC1      ;温度数送显示 第一路


            LCALL SJ1         ;调用时钟计时
            LCALL SW1           ;调用按键扫描


           MOV A,RAM1602B
           CJNE A,#00,AA11

           LCALL LCD_SC1     ;调用正常显示
           LJMP AA2

      AA11: LCALL LCD_SCX1    ; 调用闪烁显示


      AA10: LJMP AA2





;------------------------------------------
回复 支持 3 反对 0

使用道具 举报

 楼主| 发表于 2020-3-31 20:09:00 来自手机浏览器 | 显示全部楼层
广东梁百万 发表于 2020-3-17 12:31
从没用过C语言,不懂什么叫头文件。 如果是汇编,那估计你说的头文件就是寄存器定义。
下面贴上我自己编的 ...

以前就看过你写的汇编代码,写的很不错,多谢多谢
回复 支持 反对

使用道具 举报

发表于 2023-4-29 19:18:48 | 显示全部楼层
印象 KEIL C51 的宏汇编可以直接支持 C风格的头文件,就像支持 C++的 // , 一样, KEIL 没理由还A51汇编不支持 C51的头文件,KEIL 没这么笨啊
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-20 19:29 , Processed in 0.546001 second(s), 19 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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