Timer3_Init(SYSCLK/12/5); DAC_Init(); EA=1; while(1) {
DAC0L=0xf0;//设置待转换的值0FF0H DAC0H=0x0f; for(i=0;i<100;i++);
DAC0L=0x0; //设置待转换的值0000H DAC0H=0x0; for(i=0;i<100;i++); } }
void DAC_init(void) {
REF0CN=0x03;//内部偏压发生器和电压基准缓冲器工作 DAC0CN|=0x88;//使能DAC0,T3溢出时更新 }
void Timer3_Init(int counts) {
TMR3CN=0x00;//SYSCLK/12作为时基 TMR3RL=-counts;//重载值 TMR3=0xffff;//立即重载 EIE2|=0x01;//允许T3中断 TMR3CN=0x04;//启动T3 }
void Timer3_ISR(void) {
TMR3CN&=~(0x80);//清TF3 }
实验2:查表实验
$INCLUDE(C8051F020.INC) org 0000h mov dptr,#table mov a,#3 rl a mov r1,a movc a,@a+dptr
push dph push dpl
mov dptr,#2000h movx @dptr,a pop dpl pop dph inc dptr mov a,r1 movc a,@a+dptr mov dptr,#2001h movx @dptr,a l1:sjmp l1
table: dw 8000h,8001h,8002h,8003h end
或: MOV A,#3
CALL SEARCH MOV DPTR,#2000H MOV A,R2 MOVX @DPTR,A MOV A,R3 INC DPTR MOVX @DPTR,A SJMP $
SEARCH:MOV DPTR,#table
RL A MOV B,A
MOVX A,@A+DPTR MOV R2,A MOV A,B INC A
MOVX A,@A+DPTR MOV R3,A
RET table: dw 8000h,8001h,8002h,8003h END