找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2157|回复: 12
打印 上一主题 下一主题
收起左侧

单片机汇编程序开机后进入待机模式,想改成开机进入高档运行,不胜感激!

 关闭 [复制链接]
楼主
ID:401564 发表于 2020-11-17 16:40 | 显示全部楼层
全文只有5个汉字
那么长的代码,就算是常用的8051C,没有注释都不是那么容易理清你的思路,汇编就更加不用说了,而且你还是合泰的汇编,如果不是工作要求,谁会去玩合泰呢?一个烧录器就400块钱,11块的STC烧录器它不香吗?
你多少有点注释吧,不然谁看得明白,就你自己写的都不好找
我以前也用过合泰,我代码的风格和你这完全不是一个世界的.......

;============================================================================
;作者:**                                                                                                                                        *
;日期:2016/11/26                                                                                                                        *
;功能:测试HT66F50的按键,主要学习:按键去抖动,间接指针寻址操作                                *
;备注:工程设定:使用4MHZ内部晶振,PD端口要设定为输入功能,还要设定上拉电阻                *
;对于查表,要注意,高位不用的指针一定要定义为0,如果不定义的话,查表结果会出错        *
;============================================================================
include HT66F50.inc                ;包含HT66F50头文件
S1        EQU        PD.0                        ;PD0声明为S1
ds        .section        'data'        ;数据存储空间
DEL1        DB        ?                        ;在数据空间保留一个字节的空间,延时
DEL2        DB        ?                        ;在数据空间保留一个字节的空间,延时
DEL3        DB        ?                        ;在数据空间保留一个字节的空间,延时
COUNT        DB        ?                        ;在数据空间保住一个字节的空间,显示计数
;============================================================================
cs        .SECTION        'code'        ;程序存储空间,从000H开始执行
                ORG 040H                ;程序从050H开始执行
STAR:        CLR ACERL                ;作为I/O端口使用,不使用ADC输入引脚功能
                CLR C0SEL                ;关闭比较器电路,比较器无功耗
                MOV A,08H                ;比较输出不连接,作为单独的I/O端口使用
                MOV CP1C,A                ;关闭比较器
                MOV CP0C,A                ;关闭比较器
                CLR PCC                        ;PC 作为输出端口
                CLR        PAC                        ;PA        作为输出端口
                SET        PDC                        ;PD        作为输入端口
                SET PDPU                ;PD        加上上拉电阻
MAIN:        MOV A,10       
                MOV COUNT,A                ;显示的个数为10
                MOV A,OFFSET TAB_7_SEG        ;取得七段码显示表格的表头地址
                MOV TBLP,A                ;表头地址加载到查表指针低位,小于255的数据都只用到低位指针
                MOV A,1FH                ;HT66F50最后一页地址是1FF8H,所以,高位就是1FH
                MOV TBHP,A                ;查表指针的高位一定要确定,不能不设定,不然的话,查表会出错       
LOOP:        TABRDC        PC                ;查表,并在PC显示
                MOV A,TBLH                ;查表结果的高位保存到A
                MOV PA,A                ;高位的结果在PA输出
                SZ        S1                        ;S1是0就跳过下一条指令,1:按下,0:没按下
                JMP LOOP                ;S1为1,没有按下按键,跳去显示
                CALL        DELAY        ;S1按下,调用50mS延时,去抖动
                SZ        S1                        ;S1是0就跳过下一条指令,这是去抖动之后的动作,1:按键松开,0:按键没松开
                JMP        LOOP                ;去显示,检测50mS之后,如果按键还没有松开,就是按下,否则,视为抖动
                INC TBLP                ;查表指针加1
                SDZ        COUNT                ;COUNT减1,是0就跳过下一条指令
                JMP LOOP                ;去显示
                JMP        MAIN                ;重新开始
;===========================================================================================
;******************************************************************************************
;合泰指令系统是4个时钟为一个指令周期,4MHZ的晶振,一个指令是1uS
;这是一个50mS的延时程序,由A决定了总延时时间
DELAY:                 MOV A,1
                        MOV        DEL1,A        ;这时个性DEL1的值,可以改变延时的时间为50mS的整倍数
DLOOP1:                MOV        A,200D        ;1
                        MOV        DEL2,A        ;1
DLOOP2:                MOV        A,167D        ;1
                        MOV        DEL3,A        ;1         *****************************************************
DLOOP3:                SDZ        DEL3        ;1X167=167,*DLOOP3的指令执行次数是499次,时间是499uS=0.5mS      *
                        JMP        DLOOP3        ;2X166=132 *以后,如果是要改变延时的话,可以通过改变A的值来改变  *
                        SDZ        DEL2        ;1         *其它指令的执行时间可以补偿最终的时间误差           *
                        JMP        DLOOP2        ;2         *****************************************************
                        SDZ        DEL1        ;1
                        JMP        DLOOP1        ;2
                        RET
;====================================================================================
;这个表是一个七段码显示表,自己焊的学习板上用的就是这个
                ORG LASTPAGE                ;把表的数据放在最后一页,LASTPAGE是最后一页的伪指令               
                TAB_7_SEG:
                DC      001+00010001B SHL 8         ;0                       
                DC            002+10011111B SHL 8          ;1                       
                DC            004+00110010B SHL 8           ;2               
                DC      008+00010110B SHL 8         ;3                 
                DC             016+10011100B SHL 8          ;4
                DC            032+01010100B SHL 8          ;5
                DC             064+01010000B SHL 8          ;6
                DC             128+00011111B SHL 8         ;7       
                DC             0F0H+00010000B SHL 8          ;8       
                DC             0FFH+00010100B SHL 8          ;9
;对于30H+000101000B SHL 8
;这是一个16位的表,运行的结果是30H被放在表的低位,00010100B被放在高位
;SHL在二元运算上的等级要比+二元运算的等级高,所以,先是左移,然后才加
;==================================================================================               
                        END       

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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