⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 80c196kd.inc

📁 基于80196KB开发的C程序,在伟福和星研环境中编译通过,用于学习8096系列单片机的中断编程技术.并成功地用于某地机动车检测业务.
💻 INC
字号:
$gen

;*******************************************************************************
; 80C196.INC - DEFINITION OF SYMBOLIC NAMES FOR THE I/O REGISTERS OF THE
;              80C196
;*******************************************************************************

_HOLDEN           set   80h
WIN0              set    0h
WR_WIN_MASK       set   0fh
RD_WIN_MASK       set    4h
BYTE_WORD_MASK    set    8h

READ_WIN0         set   00h
READ_WIN1         set   10h
READ_WIN15        set  0f0h
WRITE_WIN0        set   00h
WRITE_WIN1        set   01h
WRITE_WIN15       set   0fh 
READ_WRITE_ANY    set   55h
RD_WR_ANY         set    5h
WORD_OP           set  100h

tmpreg            equ   1ch

r0                equ   00h:word
zero_reg          equ   00h:word
ad_command        equ   02h:byte
ad_result         equ   02h:word
ad_result_lo      equ   02h:byte
ad_result_hi      equ   03h:byte
ad_time           equ   03h:byte
hsi_mode          equ   03h:byte
hso_time          equ   04h:word
hsi_time          equ   04h:word
hso_command       equ   06h:byte
hsi_status        equ   06h:byte
sbuf              equ   07h:byte
int_mask          equ   08h:byte
int_pend          equ   09h:byte
int_pending       equ   09h:byte
watchdog          equ   0ah:byte
timer1            equ   0ah:word
ioc2              equ   0bh:byte
ioc3              equ   0ch:byte
t2capture         equ   0ch:byte
timer2            equ   0ch:word
baud_rate         equ   0eh:byte
ioport0           equ   0eh:byte
ioport1           equ   0fh:byte
ioport2           equ   10h:byte
sp_con            equ   11h:byte
sp_stat           equ   11h:byte
int_pend1         equ   12h:byte
ipend1            equ   12h:byte
int_mask1         equ   13h:byte
imask1            equ   13h:byte
wsr               equ   14h:byte
ioc0              equ   15h:byte
ios0              equ   15h:byte
ioc1              equ   16h:byte
ios1              equ   16h:byte
ios2              equ   17h:byte
pwm_control       equ   17h:byte
pwm0_control      equ   17h:byte
pwm1_control      equ   16h:byte
pwm2_control      equ   17h:byte
sp                equ   18h:word
ptssrv            equ   06h:word
ptssel            equ   04h:word

r0_w              set   READ_WRITE_ANY + WORD_OP
zero_reg_w        set   READ_WRITE_ANY + WORD_OP
ad_command_w      set   READ_WIN15 + WRITE_WIN0
ad_result_w       set   READ_WIN0 + WRITE_WIN15 + WORD_OP
hsi_mode_w        set   READ_WIN15 + WRITE_WIN0
hso_time_w        set   READ_WIN15 + WRITE_WIN0 + WORD_OP
hsi_time_w        set   READ_WIN0 + WRITE_WIN15 + WORD_OP
hso_command_w     set   READ_WIN15 + WRITE_WIN0
hsi_status_w      set   READ_WIN0 + WRITE_WIN15
sbuf_w            set   READ_WIN0 + WRITE_WIN15
int_mask_w        set   READ_WRITE_ANY
int_pend_w        set   READ_WRITE_ANY
int_pending_w     set   READ_WRITE_ANY
timer1_w          set   READ_WIN0 + WRITE_WIN15 + WORD_OP
timer2_w          set   READ_WIN0 + WRITE_WIN15 + WORD_OP
baud_rate_w       set   WRITE_WIN0
ioport0_w         set   READ_WIN0
ioport1_w         set   READ_WIN0 + WRITE_WIN0
ioport2_w         set   READ_WIN0 + WRITE_WIN0
sp_con_w          set   READ_WIN15 + WRITE_WIN0
sp_stat_w         set   READ_WIN0 + WRITE_WIN15
ioc0_w            set   READ_WIN15 + WRITE_WIN0
ios0_w            set   READ_WIN0 + WRITE_WIN15
ioc1_w            set   READ_WIN15 + WRITE_WIN0
ios1_w            set   READ_WIN0 + WRITE_WIN15
pwm_control_w     set   READ_WIN15 + WRITE_WIN0
pwm0_control_w    set   READ_WIN15 + WRITE_WIN0
ioc2_w            set   READ_WIN15 + WRITE_WIN0
ioc3_w            set   READ_WIN1 + WRITE_WIN1
t2capture_w       set   READ_WIN15 + WRITE_WIN15 + WORD_OP
int_pend1_w       set   READ_WRITE_ANY
ipend1_w          set   READ_WRITE_ANY
int_mask1_w       set   READ_WRITE_ANY
imask1_w          set   READ_WRITE_ANY
wsr_w             set   READ_WRITE_ANY
ios2_w            set   READ_WIN0 + WRITE_WIN15
ad_time_w         set   READ_WIN1 + WRITE_WIN1
ptssel_w          set   READ_WIN1 + WRITE_WIN1 + WORD_OP
ptssrv_w          set   READ_WIN1 + WRITE_WIN1 + WORD_OP
pwm1_control_w    set   READ_WIN1 + WRITE_WIN1
pwm2_control_w    set   READ_WIN1 + WRITE_WIN1


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

_ReadSFR macro Destination, SFR
local ReadWindow, Byte_or_Word

ReadWindow	set	((SFR&_w shr RD_WIN_MASK) and 0fh)
Byte_or_Word 	set	(SFR&_w shr BYTE_WORD_MASK)

if not(ReadWindow = RD_WR_ANY)
     ldb  wsr, #ReadWindow + _HOLDEN
endif     
if (Byte_or_Word = 1)
     st   SFR, Destination
else
     stb  SFR, Destination
endif    
endm

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

_WriteSFR macro SFR, Value
local WriteWindow, Byte_or_Word

WriteWindow	set	(SFR&_w and WR_WIN_MASK)
Byte_or_Word 	set	(SFR&_w shr BYTE_WORD_MASK)

if not (WriteWindow = RD_WR_ANY)
     ldb  wsr, #WriteWindow + _HOLDEN
endif     
if (Byte_or_Word = 1)
     ld   SFR, Value
else
     ldb  SFR, Value
endif 
endm

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

_ClrSFR_bit macro SFR, BitNumber
local WriteWindow, ReadWindow, Byte_or_Word, MaskValue

WriteWindow	set	(SFR&_w and WR_WIN_MASK)
ReadWindow	set	((SFR&_w shr RD_WIN_MASK) and 0fh)
Byte_or_Word 	set	(SFR&_w shr BYTE_WORD_MASK)
MaskValue	set	not (1 shl BitNumber)

if not (ReadWindow = RD_WR_ANY)
     ldb  wsr, #ReadWindow + _HOLDEN
endif
if ((ReadWindow = RD_WR_ANY) or (ReadWindow = WriteWindow))
     if (Byte_or_Word = 1)
     and  SFR, #MaskValue
     else
     andb SFR, #MaskValue
     endif
else
     if (Byte_or_Word = 1)
     and  tmpreg, SFR, #MaskValue
     ldb  wsr, #WriteWindow + _HOLDEN
     ld   SFR, tmpreg
     else
     andb tmpreg, SFR, #MaskValue
     ldb  wsr, #WriteWindow + _HOLDEN
     ldb  SFR, tmpreg
     endif
endif
endm

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

_AndSFR macro SFR, MaskValue
local WriteWindow, ReadWindow, Byte_or_Word

WriteWindow	set	(SFR&_w and WR_WIN_MASK)
ReadWindow	set	((SFR&_w shr RD_WIN_MASK) and 0fh)
Byte_or_Word 	set	(SFR&_w shr BYTE_WORD_MASK)

if not (ReadWindow = RD_WR_ANY)
     ldb  wsr, #ReadWindow + _HOLDEN
endif
if ((ReadWindow = RD_WR_ANY) or (ReadWindow = WriteWindow))
     if (Byte_or_Word = 1)
     and  SFR, MaskValue
     else
     andb SFR, MaskValue
     endif
else
     if (Byte_or_Word = 1)
     and  tmpreg, SFR, MaskValue
     ldb  wsr, #WriteWindow + _HOLDEN
     ld   SFR, tmpreg
     else
     andb tmpreg, SFR, MaskValue
     ldb  wsr, #WriteWindow + _HOLDEN
     ldb  SFR, tmpreg
     endif
endif
endm

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

_SetSFR_bit macro SFR,BitNumber
local WriteWindow, ReadWindow, Byte_or_Word, MaskValue

WriteWindow	set	(SFR&_w and WR_WIN_MASK)
ReadWindow	set	((SFR&_w shr RD_WIN_MASK) and 0fh)
Byte_or_Word 	set	(SFR&_w shr BYTE_WORD_MASK)
MaskValue	set	(1 shl BitNumber)

if not (ReadWindow = RD_WR_ANY)
     ldb  wsr, #ReadWindow + _HOLDEN
endif
if ((ReadWindow = RD_WR_ANY) or (ReadWindow = WriteWindow))
     if (Byte_or_Word = 1)
     or   SFR, #MaskValue
     else
     orb  SFR, #MaskValue
     endif
else
     if (Byte_or_Word = 1)
     ld   tmpreg, SFR
     or   tmpreg, #MaskValue
     ldb  wsr, #WriteWindow + _HOLDEN
     ld   SFR, tmpreg
     else
     ldb  tmpreg, SFR
     orb  tmpreg, #MaskValue
     ldb  wsr, #WriteWindow + _HOLDEN
     ldb  SFR, tmpreg
     endif
endif
endm

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

_OrSFR macro SFR, MaskValue
local WriteWindow, ReadWindow, Byte_or_Word

WriteWindow	set	(SFR&_w and WR_WIN_MASK)
ReadWindow	set	((SFR&_w shr RD_WIN_MASK) and 0fh)
Byte_or_Word 	set	(SFR&_w shr BYTE_WORD_MASK)

if not(ReadWindow = RD_WR_ANY)
     ldb  wsr, #ReadWindow + _HOLDEN
endif
if ((ReadWindow = RD_WR_ANY) or (ReadWindow = WriteWindow))
     if (Byte_or_Word = 1)
     or   SFR, MaskValue
     else
     orb  SFR, MaskValue
     endif
else
     if (Byte_or_Word = 1)
     ld   tmpreg, SFR
     or   tmpreg, MaskValue
     ldb  wsr, #WriteWindow + _HOLDEN
     ld   SFR, tmpreg
     else
     ldb  tmpreg, SFR
     orb  tmpreg, MaskValue
     ldb  wsr, #WriteWindow + _HOLDEN
     ldb  SFR, tmpreg
     endif
endif
endm

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -