3、 MOV A,#0B2H
MOV R1,#055H ANL A,R1 ;(A= 10H ) ORL A,R1 ;(A= 55H ) XRL A,R1 ;(A= 00H ) SWAP A ;(A= 00H )
4、 设内存20H的内容为30H,30H的内容为46H,46H的内容为57H
MOV R0,#30H
MOV A,@R0 ;(PSW中P的内容= 1 ) XCH A,R0 ADD A,#0DBH SUBB A,#74H ;(A= 96H ) ;(PSW中P的内容= 0 ) ;( PSW中C的内容= 0 ) 5、 MOV 25H,#39H CLR 2AH ;(25H)=( 00111001 B) CPL 2CH ;(25H)=( 00101001 B) SETB 2EH ;(25H)=( 01101001 B) MOV C,28H ;( PSW中C的内容= 1 ) 二、 程序设计
1、MCS51内部RAM 40H~60H单元存放着有符号16进制数,将其中能被2整除的数,存放到0090H单元开始的外部RAM中。[使用汇编语言编写] 解: ORG 0000H JMP START START: MOV SP,#60H MOV DPTR,#0090H MOV R0,#40H MOV R1, #21
LOOP0: MOV A,@R0 MOV B, #2 DIV AB MOV R2, B
CJNZ R2, #0, LOOP1 ;余数为0则继续,不为0则转移 MOV A,@R0 MOV @DPTR,A INC DPTR LOOP1: INC R0
DJNZ R1, LOOP0 END 2、用MSC1211的T1定时/计数器,定时0.1S中断,使P1口的8个发光二极管每隔1S 循环点亮。设系统主频为6MHZ。
解:ORG
0000H
;转主程序
;T1中断服务程序入口地址
LJMP MAIN ORG 001BH LJMP T1-ISR ORG 0100H
MAIN:MOV SP,#60H MOV P1,#01H MOV TMOD,#10H MOV TL1,#B0H MOV TH1,#3CH SETB TR1 SETB ET1 SETB EA SJMP $ T1_ISR:MOV TL1,#B0H MOV TH1,#3CH MOV A,P1 RL A MOV P1,A EXIT: RETI END
;设置堆栈指针
;设置P1.1发光 ;T1初始化
;启动T0计数 ;允许T0中断 ;CPU开中断 ;等待
;P1口循环左移
3、设有甲、乙两台单片机,以工作方式3进行串行通讯,设晶振为
11.0592MHz,波特率为9600,甲机将内存单元中的120个数据作补偶校验后发送给乙机,乙机对接收到的数据进行奇偶校验,若校验正确,则从机发送00H给甲机,甲机继续发送数据,校验不正确,则发送0FFH给甲机,甲机重新发送原数据,编写乙机的接收程序。(应在适当的地方加程序注释)
解:ORG 0000H AJMP MAIN ORG 0023H LJMP SE2_INT MAIN:
MOV SP,#60H MOV TMOD #20H
MOV TH1,#0FDH ;设置波特率为9600bps MOV TL1,#0FDH
MOV SCON,#90H ;串行口工作方式3,允许接收 MOV DPTR,#2000H;接收数据区 MOV R1,#120 SETB TR1 SETB EA SETB ES
SJMP $ ;等待接收中断 SE2_INT:
JB RI,LOOPA CLR T1 LJMP ENDR
LOOPA:CLR RI
MOV A,SBUF MOV C,P ;奇偶校验
JC LOOP1 ;如8位数是奇,则转LOOP1再检测RB8位 ORL C,RB8 ; 如8位数为偶,再检测RB8位,RB8=1,则9位数据为奇,补偶
JC LOOP2 ;错,转LOOP2
LJMP LOOP3 ;补偶正确,转LOOP3
LOOP1: ANL C, RB8 ;8位数为奇,再检测RB8位
JC LOOP3 ;RB8=1,补偶正确,转LOOP3
LOOP2: MOV A ,#0FFH ;检测不正确发送FF给甲机
MOV SBUF,A JMP ENDR
LOOP3: MOVX @DPTR ,A MOV A,#00H MOV SBUF,A INC DPTR DJNZ R1, ENDR
CLR ES ;停止接收
ENDR: RETI
2、某一故障检测系统,当出现故障时,线路出现下降沿;没有故障时,线路为高电平。出现故障时,相应的指示灯变亮。故障消失后,指示灯熄灭。试用MSC1211为单片机实现该故障检测功能,画出电路原理图,并写出相应程序。
4、 变量k从20变到200,变化步长为20。对于每一个值,使用整形数算
术运算计算8*k,k*k*k和(40*k/150)^3。这三个值通过MSC1211的D/A转换后同步输出(均使用电压输出模式)。试编写程序实现。 解: #include 〈Reg1211.h〉 data unsigned int i , j ; void main (void) {
PDCON &=0x37 ; //同时开启ADC和DAC模块 ADCON0 =0x30 ; //内部参考电压2.5V DACSEL =6; //选择将要访问DAC加载寄存器LOADCON
DACL = 0XFC ; //设置DAC1、2、3通道同步更新模式 DACSEL = 4; //选择DAC0、1控制寄存器 DACL =0x24; //DAC IDAC 关闭,内部参考电压 DACH =0x24; //DAC1 IDAC 关闭,内部参考电压 DACSEL=5; //选择 DAC2、3控制寄存器 DACL =0x24 ; //DAC2 IDAC 关闭,内部参考电压 DACH=0x24; //DAC3 IDAC 关闭,内部参考电压 while (1) {
DACSEL = 0; //选择DAC1数据寄存器 DAC = 0x8000 ;//送DAC1要转换的数据 for (j=0 ; j <100 ; j++ ) ;// 延时 DAC =0 ;
for (i=20 ; i<200 ; i+=20 ) ;
{
DACSEL = 1; DAC = 8*k ; DACSEL =2 ;
DAC = k*k*k ; DECSEL = 3; j = 40*k/150 ; j = j^3 ;
DACSEL = 6 ; DACL = 0XFC ; } }
}