[8] 谢自美.电子线路设计·实验·测试[M].武汉:华中科技大学出版社, 2000. [9] 李东生等编著.Protel99SE电路设计技术入门与应用[M].2002年2月第1版 . [10] 清源计算机工作室编著.Protel99SE电路设计与仿真[M].2001年5月第1版 . [11] [美]Joe Camp Bell编著。串行通信 C 程序员指南[M].2000年8月.
[12] [美]Mark Nelson著.串行通信开发指南(第二版)[M].潇湘工作室译.出版日期:2000年9月第
1版.
[13] M.Morris Mano.Digital Design (Third Education).Beijing:Higher Educationg Press,2002.
附 录
程序如下: ORG 0000H LJMP MAIN
ORG 000BH;T0的中断入口 LJMP DVT0;转向中断服务程序 ORG 0013H LJMP DVT1 ORG 0100H
MAIN:SETB P2.5;CS 初始化 CLR P1.6;DIN 初始化 CLR P1.7;SCLK 初始化 CLR C;位操作位初始化 MOV A,#0FH;音量寄存器初始化 MOV R0,#8 MOV R1,#00H MOV R2,#00H
DENGD:JB P2.4,DENGD ; 等待按键SW1被按下,我们将SW1定义为音量启动端 ACALL DELAY1
YLH:JB P2.2,YLL;检测按键SW3是否被按下,我们将SW3定义为音量+ ACALL DELAY2 INC A AJMP TSQ1
YLL:JB P2.1,ZHZ;检测按键SW4是否被按下,我们将SW4定义为音量- ACALL DELAY2 DEC A AJMP TSQ1
ZHZ:JB P2.3,YLH;检测按键SW2是否被按下,我们将SW2定义为音量终止端 ACALL DELAY2 AJMP DENGD
TSQ1:CLR P2.5;产生一个1ms锁存数据更新脉冲, ACALL DELAY1 SETB P2.5 ACALL DELAY1 CLR P2.5;选中片选端
MOV TMOD,#00H;设T0 工作在方式0
MOV TH0,#0E0H;装入初值,产生1K的工作时钟 MOV TL0,#18H SETB ET0;T0 开中断 SETB TR0;启动T0 SJMP $;等待中断 DVT0:CPL P1.7;时钟端取反 RRC A MOV P1.6,C
DJNZ R0,FANH;检测是否循环8次 CLR ET0;关中断 CLR TR0;关定时器 CLR P1.7
AJMP MSB;跳往高位数据写入
FANH:MOV TH0,#0E0H;装入初值,产生1K的工作时钟 MOV TL0,#18H RETI
MSB:ACALL DELAY3 MOV R0,#8;再装循环初值
CJNE A,#0FFH,TSQ2;检测低八位是否为0FFH,若不是MSB不进位 INC R1 CLR A
TSQ2:MOV TMOD,#00H;设T0 工作在方式0
MOV TH0,#0E0H;装入初值,产生1K的工作时钟 MOV TL0,#18H SETB ET0;T0 开中断 SETB TR0;启动T0 SJMP $;等待中断 DVT1:CPL P1.7;时钟端取反 MOV R2,A MOV A,R1 RRC A MOV P1.6,C
DJNZ R0,FANHH;检测是否循环8次 MOV A,R2 CLR ET0;关中断 CLR TR0;关定时器 AJMP MAIN;跳回主程序
FANHH:MOV TH0,#0E0H;装入初值,产生1K的工作时钟 MOV TL0,#18H RETI
DELAY1:MOV R6,#10 ;1ms延时 L1:MOV R7,#100 L2:DJNZ R7,L2
DJNZ R6,L1 RET
DELAY2:MOV R6,#50 ;5ms延时 D1:MOV R7,#100 D2:DJNZ R7,D2 DJNZ R6,D1 RET
DELAY3:MOV R6,#80 ;8ms延时 H1:MOV R7,#100 H2:DJNZ R7,H2 DJNZ R6,H1 RET END