当前位置:首页 > 单片机 > 单片机
[导读] listp=16f876A;编驿参数#include;预定义头文件errorlevel0,-302;错误输出级别;配置字__CONFIG_XT_OSC&_CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON&_WRT_OFF&_LVP_OFF&_CPD_OFF;***************************

listp=16f876A;编驿参数
#include;预定义头文件
errorlevel0,-302;错误输出级别


;配置字
__CONFIG_XT_OSC&_CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON&_WRT_OFF&_LVP_OFF&_CPD_OFF

;******************************************************************************
;**
;*全局公共变量定义*
;**
;******************************************************************************
cbLOCk0x70
w_temp:1;中断时的现场保护W寄存器暂存单元
status_temp:1;中断时的现场保护STATUS寄存器暂存单元
pclath_temp:1;中断时的现场保护PCLATH寄存器暂存单元

AX:1;通用寄存器AX
BX:1;通用寄存器BX
CX:1;通用寄存器CX

delay_cnt:2;延时专用计数单元,2个字节

endc

;******************************************************************************
;**
;*在BANK1中定义的变量*
;**
;******************************************************************************
cblock0x20
base_ptr:2;显示内容基准地址指针
CTRl_byte:1;内容显示控制字
;bit<0>=红色
;bit<1>=绿色
;bit<2:4>=显示方式,0:静止,居左
;1:向左滚动,循环显示
;bit<5:7>=保留
row_bytes:1;每一行的字节总数

cur_ptr:2;当前取数据指针
row_cnt:1;行显示计数器
col_cnt:1;列显示计数器
col_offset:1;当前显示列偏移(与curr_ptr一起决定列的起点)

endc

;******************************************************************************
;**
;*单片机复位执行入口*
;**
;******************************************************************************
org0x000;

nop;预留ICD调试用
gotoMAIN;转入主执行程序入口

;******************************************************************************
;**
;* 单片机 中断执行入口*
;**
;******************************************************************************
org0x004;

MOV wfw_temp;保护现场
MOV fSTATUS,w
MOV wfstatus_temp
MOV fPCLATH,w
MOV wfpclath_temp

;此处编写自已的中断处理程序

MOV fpclath_temp,w;恢复现场
MOV wfPCLATH
MOV fstatus_temp,w
MOV wfSTATUS
swapfw_temp,f
swapfw_temp,w
retfie

;******************************************************************************
;**
;*主程序执行入口*
;**
;******************************************************************************
MAIN:
callINIT_PORT;初始化PORTA,PORTB,PORTC口寄存器
MAIN_1:
bankselbase_ptr
MOV lwlow(Hz_TABLE_1);置显示数据基准指针
MOV wfbase_ptr
MOV lwhigh(HZ_TABLE_1)
MOV wfbase_ptr+1
MOV lw0x03;置显示控制字,红绿色,静止,居左显示
MOV wfctrl_byte
MOV lw0x08;置总显示列宽度,4个汉字,8个字节
MOV wfrow_bytes
MAIN_2:
MOV lw0x00;置显示列偏移值为0
MOV wfcol_offset
MOV lw0x00;置起启显示行从Y0..Y15循环
MOV wfrow_cnt
MOV fbase_ptr,w
MOV wfcur_ptr
MOV fbase_ptr+1,w
MOV wfcur_ptr+1
MAIN_3:
MOV fwrow_bytes
MOV wfcol_cnt
MAIN_4:
callGET_DATA;获得一个字节数据

MOV wfAX
MOV fcol_offset,w
MOV wfBX
MOV lw0x08
MOV wfCX
callSHIFT_BYTE

decfszcol_cnt,f
gotoMAIN_4

callLATCH_REGISTER

bankselPORTB
MOV frow_cnt,w
MOV wfPORTB

callSLEEP_MS

incfrow_cnt,f
btfssrow_cnt,4
gotoMAIN_3
MAIN_5:
gotoMAIN_2
;******************************************************************************
;**
;*初始化PORT寄存器*
;**
;******************************************************************************
INIT_PORT:
BANKSELTRISB
clrfTRISB;PORTB寄存器的bit<0:3>用于行计数输出
BANKSELPORTB
MOV lw0x10;PORTB的BIT4=1,关闭所有LED显示
MOV wfPORTB

BANKSELADCON1;设置PORTA寄存器为数字I/O
MOV lw0x10
MOV wfADCON1
BANKSELTRISA;设置PORTA为数字输出寄存器
clrfTRISA;bit<0>用于红色移位数据输出,bit<1>用于绿色.bit<2>为移位脉冲,bit<3>为锁存脉冲

return;返回

;******************************************************************************
;**
;*将一个字节移入列寄存器*
;**
;*入口参数:*
;*AX中为移位数据*
;*BX中为起始位0=D7,1=D6,...*
;*CX中为移动计数*
;*出口参数:*
;*无*
;**
;******************************************************************************
SHIFT_BYTE:
MOV fBX,f;是从D7开如写入列寄存器?
skpnz
gotoSHIFT_BYTE_2
SHIFT_BYTE_1:
rlfAX,f;从AX中移去多余的数据位
decfszBX,f
gotoSHIFT_BYTE_1

SHIFT_BYTE_2:
BANKSELPORTA;选择端口A的所在页面
SHIFT_BYTE_3:
MOV lw0x03;预置,红、绿都为亮
rlfAX,f
skpc
MOV lw0x00;红、绿都为灭
andwfctrl_byte,w;确定显示的颜色
andlw0x03;屏蔽多余的位
MOV wfPORTA;数据输出到移位总线上,PORTA的BIT<0:1>

nop
nop
nop
iorlw0x04;在PORTA的BIT<2>上生成一个上升沿移位脉冲,将数据移入列寄存器
MOV wfPORTA;置PORTA的BIT<2>为高电平
nop
nop
nop
andlw0x03
MOV wfPORTA;置PORTA的BIT<2>为低电平
nop;完成移位脉冲输出
nop
nop

decfszCX,f;是否输出了所有的数据位
gotoSHIFT_BYTE_2;继续下一位输出

return;完成一个字节的移位输出,返回

;******************************************************************************
;**
;*将列寄存器的内容输出显示*
;**
;*入口参数:*
;*无*
;*出口参数:*
;*无*
;**
;******************************************************************************
LATCH_REGISTER:
BANKSELPORTA;选择端口A的所在页面

MOV lw0x00;在PORTA的BIT<3>上生成一个↑上升沿锁存脉冲,将移位数据打入锁存器
MOV wfPORTA
nop
nop
nop
MOV lw0x08;置PORTA的BIT<3>为高电平
MOV wfPORTA
nop
nop
nop
MOV lw0x00;置PORTA的BIT<3>为低电平
MOV wfPORTA
nop
nop
nop

return;完成脉冲输出,返回

;******************************************************************************
;**
;*廷时子程序*
;**
;*入口参数:*
;*无*
;*出口参数:*
;*无*
;**
;******************************************************************************
SLEEP_MS
MOV lw.2
MOV wfdelay_cnt+1
SLEEP_MS_1
MOV lw.199
MOV wfdelay_cnt
SLEEP_MS_2
nop
decfszdelay_cnt,f
gotoSLEEP_MS_2
decfszdelay_cnt+1,f
gotoSLEEP_MS_1

return

DELAY_NOP:
nop
nop
nop
nop
nop
return

;******************************************************************************
;**
;*查表获得数据*
;**
;*入口参数:*
;*cur_ptr中为查表指针*
;*出口参数:*
;*W中为值*
;*说明:*
;*本程序先将指针加一,再取数据*
;**
;******************************************************************************
GET_DATA:
incfcur_ptr,f
skpnz
incfcur_ptr+1,f
MOV fcur_ptr+1,w
MOV wfPCLATH
MOV fcur_ptr,w
MOV wfPCL

;******************************************************************************
;**
;*显示数据定义*
;**
;******************************************************************************
HZ_TABLE_1:dt0x00;占位节字
dt0x00,0x80,0x00,0x00,0x01,0x00,0x10,0x80
dt0x00,0x80,0x41,0x84,0x21,0x08,0x10,0x80
dt0xFC,0x80,0x26,0x7E,0x11,0x0C,0x51,0x04
dt0x04,0xFC,0x14,0x44,0x09,0x10,0x51,0xFE
dt0x45,0x04,0x04,0x44,0x09,0x20,0x52,0x00
dt0x46,0x48,0x04,0x44,0x01,0x04,0x54,0x80
dt0x28,0x40,0xF4,0x44,0xFF,0xFE,0x58,0x60
dt0x28,0x40,0x14,0xC4,0x04,0x40,0x50,0x24
dt0x10,0x40,0x15,0x44,0x04,0x40,0x57,0xFE
dt0x28,0x40,0x16,0x54,0x04,0x40,0x54,0x44
dt0x24,0xA0,0x14,0x48,0x04,0x40,0x54,0x44
dt0x44,0xA0,0x10,0x40,0x08,0x40,0x54,0x44
dt0x81,0x10,0x10,0x40,0x08,0x42,0x54,0x44
dt0x01,0x08,0x28,0x40,0x10,0x42,0x14,0x44
dt0x02,0x0E,0x47,0xFE,0x20,0x3E,0x17,0xFC
dt0x0C,0x04,0x00,0x00,0x40,0x00,0x14,0x04




;******************************************************************************
;**
;*源程序结束*
;**
;******************************************************************************
END

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭