四川大学电气信息学院实验报告课程:通信系统原理实验名称:通信系统原理设计性实验课任老师:张奕专业:通信工程年级:2013级学生姓名:余佩学号:2013141443050一、实验目的● 理解信源编码和解码的原理、步骤以及方法 ● 复习并更加熟练地掌握汇编语言的编程方法 ● 学习在EMC 开发工具下编程 ● 学习使用EM78P259N 微控制器 ●通过观测示波器了解编码二、编码实验1、双极性不归零码 (1)实验原理"1"码和"0"码都有电流,但是"1"码是正电流,"0"码是负电流,正和负的幅度相等,极性相反,故称为双极性码。
此时的判决门限为零电平,接收端使用零判决器或正负判决器,接收信号的值若在零电平以上为正,判为"1"码;若在零电平以下为负,判为"0"码。
(2)实验流程图开始将Byte2和Byte1暂存于Data_temp2和Data_temp1中并设置编码计数值Data_temp2,7=1? Y 输出正电平输出负电平 输出零电平输出零电平结束Data_temp2和Data_temp1分别左移 编码计数值不为0? NYN(3)实验思路需要在单极性不归零码的基础上,在程序的开始和结束时添加调用零电平的程序即可(4)实验程序/*****************************双极性不归零码子程序****************************/Coding_Bi_NRZ: MOV A,Byte2MOV Data_temp2,A ;将Byte2中的数据暂存于Data_temp2中MOV A,Byte1MOV Data_temp1,A ;将Byte2中的数据暂存于Data_temp1中MOV A,@16MOV temp,A ;Byte2,Byte1中的信息共计16位需要编码输出call pulse_zero;=====输出16位编码=======Bi_NRZ_LOOP:JBS Data_temp2,7CALL Pulse_negative ;Data_temp2.7=0,调用负脉冲子程序JBC Data_temp2,7CALL Pulse_positive ;Data_temp2.7=1,调用正脉冲子程序;信息左移1位:RLC Data_temp1 ; R(n) -> R(n+1), R(7) -> C=Data_temp1.7RLC Data_temp2 ; C=Data_temp1.7 -> R(0),R(n) -> R(n+1), R(7) -> CDJZ temp ; temp-1=0?JMP Bi_NRZ_LOOP ; NO,继续编码输出call pulse_zero;=======================RET ; NRZ编码输出完毕/*****************************************************************************/(5)实验结果图一图二(6)调试分析如图一所示,输入十六进制码3456(相应的二进制为0011 0100 0101 0110),再打开示波器,波形如图二所示。
2.传号差分码(1)实验原理传号差分码的编码规则是用“1”和“0”表示发生电平跳变和电平不跳变,电平跳变用“1”表示,电平不跳变用“0”表示。
(2)实验流程图开始将Byte2和Byte1暂存于Data_temp2和Data_temp1中,设置编码计数值和存放极性的寄存器YP并置0输出零电平上一位电平与当前位电平是否改变?输出正电平输出负电平temp左移编码计数值不为0?YNYN输出零电平结束(3)实验思路在双极性码的基础上,添加一个寄存器用于存放上一位编码的极性,再将存放极性的寄存器和存放下一位编码的寄存器进行异或。
若异或结果为1,即电平发生了跳变,则输出正电平;若异或结果为0,同之前比电位没改变,则输出负电平。
每次只能读出一位,所以最后再左移存放极性的寄存器,然后再进行下一次循环。
(4)实验程序/**********************************传号差分码子程序*******************************/Coding_DE_Mark: ;传号差分码子程序;(对存放在Byte2,Byte1中的信息进行编码输出)MOV A,Byte2MOV Data_temp2,A ;将Byte2中的数据暂存于Data_temp2中MOV A,Byte1MOV Data_temp1,A ;将Byte2中的数据暂存于Data_temp1中MOV A,@16MOV temp,A ;Byte2,Byte1中的信息共计16位需要编码输出call pulse_negativeYP==0x24CLR YP;=====输出16位编码=======DE_Mark_LOOP:MOV a,Data_temp2XOR YP,aJBS yp,7CALL Pulse_negative ;Data_temp2.7=0,调用负脉冲子程序JBC yp,7CALL Pulse_positive ;Data_temp2.7=1,调用正脉冲子程序RLC Data_temp1 ; R(n) -> R(n+1), R(7) -> C=Data_temp1.7RLC Data_temp2 ; C=Data_temp1.7 -> R(0),R(n) -> R(n+1), R(7) -> CDJZ temp ; temp-1=0?JMP DE_Mark_LOOP; NO,继续编码输出call pulse_negative;=======================RET ; 传号差分编码输出完毕/*****************************************************************************/ (5)实验结果图三图四(6)调试分析如图三所示,输入十六进制码55D3(相应的二进制为0101 0101 1101 0011),经过传号差分码编码后的二进制结果为0110 0110 1001 1101。
打开示波器,波形如图四所示。
,理解并学会活用给新寄存器赋值,学会CLR3.空号差分码(1)实验原理空号差分码的编码规则是用“0”和“1”表示发生电平跳变和电平不跳变。
与传号差分码相反,空号差分码中,电平跳变用“0”表示,电平不跳变用“1”表示。
(2)实验流程图开始将Byte2和Byte1暂存于Data_temp2和Data_temp1中,设置编码计数值和存放极性的寄存器YP1置1输出零电平上一位电平与当前位电平是否改变?输出正电平输出负电平NYtemp左移Y编码计数值不为0?N输出零电平结束(3)实验思路由于空号差分码正电平和负电平的编码规则与传号差分码的正好相反,所以空号差分码的程序段需要在传号差分码的基础上添加一个取反的语句,即MOV A,@0XFF XOR YP1,A,将上一步骤的异或结果取反。
将异或取反后的结果置于寄存器YP1中,输t 出emp的最高位再左移temp,然后再进行下一次的循环。
(4)实验程序/******************************空号差分码子程序*************************************/Coding_DE_Space: ;空号差分码子程序;(对存放在Byte2,Byte1中的信息进行HDB3编码输出)MOV A,Byte2MOV Data_temp2,A ;将Byte2中的数据暂存于Data_temp2中MOV A,Byte1MOV Data_temp1,A ;将Byte2中的数据暂存于Data_temp1中MOV A,@16MOV temp,A ;Byte2,Byte1中的信息共计16位需要编码输出call pulse_positiveYP1==0x25MOV A,@0xFFMOV YP1,ADE_Space_LOOP:MOV A,@0xFFXOR YP1,AMOV a,Data_temp2XOR YP1,aJBC yp1,7CALL Pulse_negative ;Data_temp2.7=0,调用负脉冲子程序JBS yp1,7CALL Pulse_positive ;Data_temp2.7=1,调用正脉冲子程序RLC Data_temp1 ; R(n) -> R(n+1), R(7) -> C=Data_temp1.7RLC Data_temp2 ; C=Data_temp1.7 -> R(0),R(n) -> R(n+1), R(7) -> CDJZ temp ; temp-1=0?JMP DE_Space_LOOP ; NO,继续编码输出call pulse_negativeRET/*****************************************************************************/(5)实验结果图五图六(6)调试分析如图五所示,输入十六进制码4723(相应的二进制为0100 0111 0010 0011),经过空号差分码的编码后,二进制结果为1101 0000 1001 0111。
打开示波器,波形如图六所示。
在设定新的寄存器时,没有掌握好寄存器的定义,将新寄存器先置0了再将立即数存进去,这样就没意义,编码就是要求精简而准确。
4.AMI码(1)实验原理AMI 码属于单极性码的变形,当遇0码时为零电平,当遇1码则存在两种交替转换器极性,这样确保正负极性个数相等。
编码规则:遇到编码为0时就只出现0;消息代码中的1 传输码中的+1、-1交替。
例如:消息代码:1 0 1 1 0 1 0 1 1 1 AMI 码: +1 0 -1 +1 0 -1 0 +1 -1 +1(2)实验流程图开始将Byte2和Byte1暂存于Data_temp2和Data_temp1中,置YP2为0输出零电平Data_temp2=0?输出零电平YP2=0?输出负电平输出正电平YP2为1 YP2为0编码计数值不为0?Data_temp2和Data_temp1左移一位输出零电平结束YNNYYN(3)实验思路输入为0的时候输出为零电平,输入为1的时候为了满足极性交替的规律,需要设置标志位,给标志位计数。
设标志位为1时输出正电平,标志位为0时输出负电平。