历史上的今天
返回首页

历史上的今天

今天是:2025年01月26日(星期日)

2018年01月26日 | HT48R50A的 电源掉电模式示例程序

2018-01-26


; ******************************************** 
; Function :       电源掉电模式示例程序     * 

; MICroProcessor : HT48R50A-1/28SKDIP-A      * 

; Author:         www.picavr.com             * 
; Crystal :       4MHz                       * 
; ******************************************** 

#INCLUDE                HT48R50A-1.INC 
LCD_DATA                EQU     PB 
LCD_DATA_CTRL           EQU     PBC 
LCD_CTRL                EQU     PC 
LCD_CTRL_CTRL           EQU     PCC 
E                       EQU     5 
RS                      EQU     3 
;-------------------------------------------------------------------- 
DATA    .SECTION        AT 60H  ’DATA’ 
DELAY_COUNTER_1         DB      ?       ;[60H] 
DELAY_COUNTER_2         DB      ?       ;[61H] 
DELAY_COUNTER_3         DB      ?       ;[62H] 
DATA                    DB      ?       ;[63H] 
COUNTER                 DB      ?       ;[64H] 
EXE_INT_FLAG            DB      ?       ;[65H] 
;-------------------------------------------------------------------- 
CODE    .SECTION        AT 00H  ’CODE’ 
                ORG     00 
                JMP     START 
                ORG     04H 
                JMP     INTERRUPT 
                ORG     0CH 
                JMP     TIMER1 

                ORG     20H 
START: 
                CLR     LCD_DATA_CTRL 
                CLR     LCD_CTRL_CTRL 
                CLR     LCD_DATA 
                CLR     LCD_CTRL 
                CLR     PAC 
                CLR     EXE_INT_FLAG 
                CALL    LCD_RESET 
                 MOV      A,0BH 
                 MOV      INTC,A 
                 MOV      A,80H 
                 MOV      TMR1C,A 
SLEEP: 
                 MOV      A,OFFSET LCD_MESSAGE_1 
                 MOV      TBLP,A 
                CALL    LCD_DISPLAY 
                HALT 
;-------------------------------------------------------------------- 
                SIZ     EXE_INT_FLAG 
                JMP     PORT_7 
                JMP     SLEEP 
PORT_7: 
                 MOV      A,OFFSET LCD_MESSAGE_3 
                 MOV      TBLP,A 
                CALL    LCD_DISPLAY 
                 MOV      A,OFFSET MUSIC_DATA 
                 MOV      TBLP,A 
                 MOV      A,08H 
                 MOV      COUNTER,A 
PLAY_MUSIC: 
                TABRDL  DATA 
                 MOV      A,DATA 
                 MOV      TMR1L,A 
                INC     TBLP 
                TABRDL  DATA 
                 MOV      A,DATA 
                 MOV      TMR1H,A 
                INC     TBLP 
                SET     TMR1C.4 
                CALL    DELAY 
                SDZ     COUNTER 
                JMP     PLAY_MUSIC 
                CLR     TMR1C.4 
                JMP     SLEEP 
                RET 
;-------------------------------------------------------------------- 
INTERRUPT: 
                 MOV      A,OFFSET LCD_MESSAGE_2 
                 MOV      TBLP,A 
                CALL    LCD_DISPLAY 
                 MOV      A,10H 
                 MOV      COUNTER,A 
                 MOV      A,OFFSET SEGMENT_DATA 
                 MOV      TBLP,A 
LOOP_INT: 
                TABRDL  DATA 
                 MOV      A,DATA 
                 MOV      PA,A 
                CALL    DELAY 
                INC     TBLP 
                SDZ     COUNTER 
                JMP     LOOP_INT 
                SET     PA 
                CLR     INTC.4 
                SET     EXE_INT_FLAG 
                RETI 
;-------------------------------------------------------------------- 
TIMER1: 
                SZ      PC.2 
                JMP     OUTPUT_0 
                SET     PC.2 
                JMP     OUTPUT_END 
OUTPUT_0: 
                CLR     PC.2 
OUTPUT_END: 
                RETI 
;-------------------------------------------------------------------- 
LCD_RESET       PROC 
                 MOV      A,30H       ; LCD reset , step 1 
                 MOV      LCD_DATA,A  ; 
                CALL    WRITE       ; 
                CALL    DELAY       ; LCD reset , step 2 
                 MOV      A,30H       ; LCD reset , step 3 
                 MOV      LCD_DATA,A  ; 
                CALL    WRITE       ; 
                CALL    DELAY       ; LCD reset , step 4 
                 MOV      A,30H       ; LCD reset , step 5 
                 MOV      LCD_DATA,A  ; 
                CALL    WRITE       ; 
                 MOV      A,38H       ; LCD setting , step 1 
                 MOV      LCD_DATA,A  ; function set 
                CALL    WRITE       ; 
                 MOV      A,06H       ; LCD setting , step 2 
                 MOV      LCD_DATA,A  ; entry mode set 
                CALL    WRITE       ; 
                 MOV      A,01H       ; LCD setting , step 3 
                 MOV      LCD_DATA,A  ; display clear 
                CALL    WRITE       ; 
                CALL    DELAY       ; 
                 MOV      A,0EH       ; LCD setting , step 4 
                 MOV      LCD_DATA,A  ; display turn on 
                CALL    WRITE       ; 
                RET 
LCD_RESET       ENDP 
;-------------------------------------------------------------------- 
LCD_DISPLAY     PROC 
                 MOV      A,01H       ; LCD setting , step 5 
                 MOV      LCD_DATA,A  ; display clear 
                CALL    WRITE       ; 
                CALL    DELAY       ; 
                 MOV      A,80H       ; LCD setting , step 6 
                 MOV      LCD_DATA,A  ; DD RAM address setting 
                CALL    WRITE       ; address = 00h (first line) 
                SET     LCD_CTRL.RS ; LCD setting , step 7 
                 MOV      A,10H       ; write data to DD RAM 
                 MOV      COUNTER,A 
DISPLAY1: 
                TABRDL  DATA 
                 MOV      A,DATA 
                 MOV      LCD_DATA,A 
                CALL    WRITE 
                INC     TBLP 
                SDZ     COUNTER 
                JMP     DISPLAY1 
                CLR     LCD_CTRL.RS ; 
                 MOV      A,0C0H      ; LCD setting , step 8 
                 MOV      LCD_DATA,A  ; DD RAM address setting 
                CALL    WRITE       ; address = 40h (second line) 
                SET     LCD_CTRL.RS ; LCD setting , step 9 
                 MOV      A,10H       ; write data to DD RAM 
                 MOV      COUNTER,A 
DISPLAY2: 
                TABRDL  DATA 
                 MOV      A,DATA 
                 MOV      LCD_DATA,A 
                CALL    WRITE 
                INC     TBLP 
                SDZ     COUNTER 
                JMP     DISPLAY2 
                CLR     LCD_CTRL.RS 
                RET 
LCD_DISPLAY     ENDP 
;-------------------------------------------------------------------- 
WRITE           PROC 
                SET     LCD_CTRL.E 
                CLR     LCD_CTRL.E 
                 MOV      A,0FFH 
                 MOV      DELAY_COUNTER_1,A 
WAIT: 
                SDZ     DELAY_COUNTER_1 
                JMP     WAIT 
                RET 
WRITE           ENDP 
;-------------------------------------------------------------------- 
DELAY           PROC 
                 MOV      A,03H 
                 MOV      DELAY_COUNTER_1,A 
                 MOV      DELAY_COUNTER_2,A 
                 MOV      DELAY_COUNTER_3,A 
DELAY_WAIT: 
                SDZ     DELAY_COUNTER_3 
                JMP     DELAY_WAIT 
                SDZ     DELAY_COUNTER_2 
                JMP     DELAY_WAIT 
                SDZ     DELAY_COUNTER_1 
                JMP     DELAY_WAIT 
                RET 
DELAY           ENDP 
;-------------------------------------------------------------------- 
                ORG     0F00H 
LCD_MESSAGE_1:          ;[Power Down mode!] 
                        ;[I am sleePINg..!] 
                DC      50H,6FH,77H,65H,72H,20H,44H,6FH 
                DC      77H,6EH,20H,6DH,6FH,64H,65H,21H 
                DC      49H,20H,61H,6DH,20H,73H,6CH,65H 
                DC      65H,70H,69H,6EH,67H,2EH,2EH,21H 

LCD_MESSAGE_2:          ;[INTB wake me up!] 
                        ;[Good morning sir] 
                DC      49H,4EH,54H,42H,20H,77H,61H,6BH 
                DC      65H,20H,6DH,65H,20H,75H,70H,21H 
                DC      47H,6FH,6FH,64H,20H,6DH,6FH,72H 
                DC      6EH,69H,6EH,67H,20H,73H,69H,72H 

LCD_MESSAGE_3:          ;[PA.7 wake me up!] 
                        ;[I love you baby ] 
                DC      50H,41H,2EH,37H,20H,77H,61H,6BH 
                DC      65H,20H,6DH,65H,20H,75H,70H,21H 
                DC      49H,20H,6CH,6FH,76H,65H,20H,79H 
                DC      6FH,75H,20H,62H,61H,62H,79H,20H 

SEGMENT_DATA:   ;7 SEGMENT DATA (COMMON ANODE) 
                DC      081H,0CFH,092H,086H     ;0123 
                DC      0CCH,0A4H,0A0H,08FH     ;4567 
                DC      080H,084H,088H,0E0H     ;89AB 
                DC      0B1H,0C2H,0B0H,0B8H     ;CDEF 

MUSIC_DATA:     ;MUSIC DATA 
                DC      043H,0FCH,0B1H,0FCH 
                DC      009H,0FDH,033H,0FDH 
                DC      083H,0FDH,0C7H,0FDH 
                DC      005H,0FEH,023H,0FEH 
;-------------------------------------------------------------------- 
                END 


推荐阅读

史海拾趣

汇顶科技(GOODiX)公司的发展小趣事

机顶盒,全称为数字视频变换盒,是现代家庭娱乐系统中的重要组成部分。从广义上讲,任何与电视机连接的网络终端设备均可称为机顶盒,它们能够接收并转换来自不同信号源的数字信号,使之成为适合在电视上播放的格式。从功能上看,机顶盒主要分为数字机顶盒和网络机顶盒两大类。

数字机顶盒主要负责实现数模转换功能,让传统模拟电视机也能观看数字电视节目,包括有线电视、卫星电视和地面广播电视的数字机顶盒。它们通过内置的调谐器接收信号,经解调器和解码器处理后,将数字信号转化为电视可识别的视频和音频流。

而网络机顶盒则进一步扩展了机顶盒的功能,它不仅能接收电视信号,还能接入互联网,提供诸如在线视频、游戏、应用程序下载等多元化服务。网络机顶盒支持高清、甚至超高清视频播放,结合智能技术,还能实现语音控制、智能推荐等便捷功能。此外,网络机顶盒还具备强大的内容分发和管理能力,通过与各大内容提供商合作,为用户提供丰富多样的节目资源。

随着科技的进步,机顶盒的发展趋势将更加注重技术升级、内容创新和用户体验。未来,机顶盒将在家庭娱乐系统中扮演更加重要的角色,为用户带来更为优质、便捷、智能的观影体验。

福斯特(FIRST)公司的发展小趣事
支持多个节点(ECU)同时进行通信。
遨格芯微(AGM)公司的发展小趣事

遨格芯微(AGM)自2012年成立以来,始终致力于可编程逻辑技术的研发。经过数年的努力,AGM成功开发出具有自主知识产权的FPGA核心技术,并在FPGA编译软件和电路领域取得了先进和成熟的技术成果。2014年,AGM的PLD芯片成熟并开始在行业得到应用,这标志着AGM在可编程逻辑技术领域取得了重大突破。随后,AGM推出三个系列的CPLD、FPGA、Programmable SoC产品,并进入量产阶段,得到了包括三星在内的多家知名厂商的认证,为公司的进一步发展奠定了坚实基础。

Flexxon Pte Ltd公司的发展小趣事

2020年新冠疫情的爆发对全球供应链造成了巨大冲击。然而,Flextronics(Flexxon Pte Ltd)凭借其强大的供应链管理和风险管理能力,迅速调整生产计划、优化资源配置、加强员工健康防护,确保了生产线的稳定运行和订单的及时交付。在疫情期间,Flextronics还积极为客户提供远程技术支持和解决方案,助力客户应对市场挑战。这一系列举措不仅展现了公司的韧性和实力,也进一步巩固了其在电子制造服务领域的领先地位。

ZTE高新兴(Gosuncn)公司的发展小趣事

2020年新冠疫情的爆发对全球供应链造成了巨大冲击。然而,Flextronics(Flexxon Pte Ltd)凭借其强大的供应链管理和风险管理能力,迅速调整生产计划、优化资源配置、加强员工健康防护,确保了生产线的稳定运行和订单的及时交付。在疫情期间,Flextronics还积极为客户提供远程技术支持和解决方案,助力客户应对市场挑战。这一系列举措不仅展现了公司的韧性和实力,也进一步巩固了其在电子制造服务领域的领先地位。

Bce Sud公司的发展小趣事

面对市场的不断变化和消费者需求的日益多样化,Bce Sud始终坚持创新驱动的发展理念。公司不断推出新产品,从半导体芯片拓展到传感器、集成电路等领域,产品线日益丰富。这些创新产品不仅提升了公司的市场竞争力,也为消费者带来了更多选择。

问答坊 | AI 解惑

高性能模/数转换器AD6645及其应用

豪华的单片机开发系统498元 可稳定视频输出的: S3C2410 ARM9开发板780元DSP5402学习开发板II200元 暑期大优惠:S3C44B0开发板(标准版)350元 单片机以太网开发板  180元 DSP5402学习开发板II200元 LABTOOL-48UXP &nb ...…

查看全部问答>

LINUX

电子教案,需要的快下哦…

查看全部问答>

求关于嵌入式软件低功耗的论文

急求关于软件低功耗的文章!!! 搜到很多都是收费的,要不就是类似的,拜托各位高手帮帮忙!!! 谢谢了!!!…

查看全部问答>

wince 6和VS2005 共存问题

   在安装了wince6以后发现vs2005的本地帮助文档不能用了,在修复了本地文档之后,原来的wince6项目又不能用了,在修复wince6,本地文档继续不能用。太郁闷了,大家有什么解决办法啊?…

查看全部问答>

EVC环境下为什么delete对象无法释放内存

我写了一个很简单的程序,窗口上就两个按钮,用于动态分配和释放内存.打开WinCE.net的SystemProperties的Memory选项卡查看内存情况,发现分配可以,但按了释放内存的按钮却不能释放内存,不知原因,望高手指点!…

查看全部问答>

注册公司的步骤

注册公司的步骤一、选择公司的形式: 普通的有限责任公司,最低注册资金3万元,需要2个或2个以上的股东, 从06年1月起新的公司法规定,允许1个股东注册有限责任公司,这种特殊的有限责任公司又称“一人有限公司”(但公司名称中不会有“一人”字 ...…

查看全部问答>

求救,STM32F101VCT6下载出现问题,

请教各位一个问题,我们现在用STM32F101VCT6的MCU,用IAR J-LINK下载出现一个错误提示: “Could not write CPU register MSP:Written:0xFFFFFFFF,Read 0xFFFFFFFC” 是什么原因的呢??…

查看全部问答>

大家帮看看为什么DeviceIoControl访问OID_802_11_BSSID_LIST老是失败

如题,下面一段程序中,DeviceIoControl访问OID_802_11_BSSID_LIST老是失败(见下面红色),也就是说bResult一直等于0;为什么?请教牛人!!!可能的问题出现在哪?为什么第二个DeviceIoControl失败?#include \"stdafx.h\"#include <windows.h ...…

查看全部问答>

介绍java的接口和原理

       卓跃教育发现随着采用Android系统的谷歌手机、平板电脑等产品逐渐扩大市场占有率,Android平台人才的缺口日益显现。据业内统计,目前国内的3G研发人才缺口有三、四百万,其中Android研发人才缺口至少30万。&n ...…

查看全部问答>

PVC系列机器人【18号】——叠行者·弓身曲展小车

  本项目是一个有着奇特行动方式的机器人,其模仿的是一种被称为“尺蠖”的小虫爬行。所谓尺蠖(huò,与“或”同音),这个名字可能有点生僻,很多人可能未必对得上号,但是如果说弓身爬行的小虫大家应该都会知道,也就是那种把身体曲成弓形后再 ...…

查看全部问答>