📄 pic16cxxx-9-7.htm
字号:
<html>
<head>
<title>PIC16Cxxx单片机应用与设计</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
BODY {font-size:12px;font-family:宋体;}
td {font-size:12px;font-family:宋体;}
A:link { COLOR: #0000ff; TEXT-DECORATION: underline}
A:visited { COLOR:#0000ff; TEXT-DECORATION: underline}
A:active { COLOR:red! important; TEXT-DECORATION: underline}
A:hover { TEXT-DECORATION: none}
.b24 a:link { FONT-SIZE: 12px; COLOR:#0000ff; TEXT-DECORATION: underline}
.b24 a:visited {FONT-SIZE: 12px; COLOR:#0000ff; TEXT-DECORATION: underline}
.b24 a:active { FONT-SIZE: 12px; COLOR:#0000ff; TEXT-DECORATION: underline}
.b24 a:hover { FONT-SIZE: 12px; COLOR:#990000; TEXT-DECORATION: none}
.lh13 { LINE-HEIGHT: 130%}
.lh15 { LINE-HEIGHT: 150%}
.lh17 { LINE-HEIGHT: 170%}
.lh19 { LINE-HEIGHT: 190%}
.lh30 { LINE-HEIGHT: 300%}
-->
</style>
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" >
<table width="757" border="0" cellspacing="0" cellpadding="0">
<tr align="center">
<td> </td>
</tr>
<tr align="center">
<td> <table width="700" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="41%" height="46" valign="top"><img src="logo.gif" width="205" height="41"></td>
<td height="46" width="59%" valign="bottom" align="right"> <table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="right"><b><font style="font-size:16px" color="#990000">——
—— —— 技术资料下载中心</font></b> </td>
</tr>
<tr>
<td height="8"></td>
</tr>
</table></td>
</tr>
<tr>
<td height="1" colspan="2"></td>
</tr>
<tr bgcolor="#990000">
<td height="1" colspan="2"></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2"><font style="font-size:16px" color="#000000"><b>>> <a href="index.htm">PIC16CXXX单片机应用与设计</a>
\</b></font></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
<table width="700" border="0" cellspacing="0" cellpadding="2" class="lh15">
<tr>
<td align="center"><b><font size="3">第九章 PIC16CXX设计范例 </font><font size="3"></font></b></td>
</tr>
<tr>
<td> <p> </p></td>
</tr>
<tr valign="top">
<td height="300"> <p>十二、PIC16C84内部数据E2PROM使用例程<br>
<br>
(一)电路设计<br>
PIC16C84内部有64*8 E2PROM数据存贮器,可以由用户用程序方便地读写,而外部不能对它读写,所以不仅能掉电保持数据,同时也具有很高的数据保密性。本例从RS232(波特率为9600B/S)的TX端接收到数据,然后写入E2PROM某一数据单元。电路图如下:</p>
<p align="center"><img src="image/a429.gif" width="418" height="211"></p>
(二)程序流程图<br>
1、主程序流程图<br> <div align="center">
<p><img src="image/a430.gif" width="183" height="350"> </p>
</div>
<p>2、中断服务子程序流程图</p>
<p align="center"><img src="image/a431.gif" width="424" height="644"></p>
<table width="85%" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td>(三)程序清单<br> <br>
include "16cxx.equ"<br>
EEDATA EQU 8H ;E2PROM数据寄存器<br>
EEADR EQU 9H ;E2PROM地址寄存器<br>
EECON1 EQU 88H ;E2PROM控制寄存器1<br>
EECON2 EQU 89H ;E2PROM控制寄存器2<br>
;E2PROM控制寄存器1 EECON1<br>
RD EQU 0 ;读控制位<br>
WR EQU 1 ;写控制位<br>
WREN EQU 2 ;写使能位<br>
WRERR EQU 3 ;写操作错误标志位<br>
EEIF EQU 4 ;写完成中断标志位<br> <br>
EEIE EQU 6 ;INTCON<6>位为E2PROM中断允许位<br> <br>
DATARAM EQU 20H ;数据暂存寄存器<br>
COUNT1 EQU 21H ;<br>
COUNT2 EQU 22H ;<br>
DATA EQU 23H<br>
ADDR EQU 0001H ;E2PROM地址<br>
;<br>
ORG 0H<br>
GOTO MAIN<br>
ORG 4<br>
INT_SERVICE ;中断服务<br>
BTFSC INTCON,INTF ;是INT中断?<br>
GOTO INT_RS232 ;是,转到接收RS232数据<br>
BSF STATUS,RP0<br>
BTFSC EECON1,EEIF ;是E2PROM中断?<br>
GOTO INT_EEPROM ;是,转到E2PROM中断处理<br>
ERROR_INT<br>
BCF STATUS,RP0<br>
RETFIE<br>
INT_EEPROM ;E2PROM中断处理<br>
BSF STATUS,RP0<br>
BCF EECON1,WREN ;禁止E2PROM写<br>
BCF STATUS,RP0<br>
MOVLW ADDR ;把地址送给<br>
MOVWF EEADR ;EEADR<br>
BSF STATUS,RP0<br>
BSF EECON1,RD ;读E2PROM<br>
BCF STATUS,RP0<br>
MOVFW DATARAM<br>
XORWF EEDATA,0 ;和原数据比较<br>
BTFSS STATUS,Z ;相等?<br>
GOTO ERROR ;否,出错<br>
BSF RA,0 ;置正确标志<br>
BCF R,1<br>
RET_INT BCF INTCON,EEIE ;清E2PROM中断允许<br>
BSF INTCON,INTE ;开INT中断允许<br>
BSF STATUS,RP0<br>
BCF EECON1,EEIF ;清E2PROM中断标志<br>
BCF STATUS,RP0<br>
RETFIE<br>
ERROR BCF RA,0 ;置错误标志<br>
BSF RA,1<br>
GOTO RET_INT<br>
INT_RS232<br>
BCF INTCON,INTE ;清INT中断允许<br>
BCF INTCON,INTF ;清INT中断标志<br>
MOVLW 8<br>
MOVWF COUNT1 ;总共收8Bit数据<br>
CALL DELAY_1/2B ;延时1/2BYTE<br>
LOOP<br>
CALL DELAY_1B ;延时1BYTE<br>
SETC<br>
BTFSS RB,0 ;读RS232数据<br>
CLRC<br>
RRF DATA ;移位<br>
DECFSZ COUNT1 ;接收完8Bit?<br>
GOTO LOOP ;否,继续<br>
BSF STATUS,RP0<br>
BSF EECON1,WREN ;E2PROM写允许<br>
BCF STATUS,RP0<br>
MOVLW ADDR ;地址送给EEADR<br>
MOVWF EEADR<br>
MOVFW DATA ;数据送给EEDATA<br>
MOVWF EEDATA<br>
BSF STATUS,RP0<br>
MOVLW 55H ;─┐<br>
MOVWF EECON2 ; │<br>
MOVLW 0AAH ; │启动写操作<br>
MOVWF EECON2 ; │<br>
BSF EECON1,WR ;─┘<br>
BCF STATUS,RP0<br>
BSF INTCON,EEIE ;开E2PROM中断允许<br>
RETFIE<br> <br>
DELAY_1/2B ;延时1/2BYTE<br>
MOVLW .43<br>
GOTO SKIP1<br>
DELAY_1B<br>
MOVLW .86 ;延时1BYTE<br>
SKIP1 MOVWF COUNT2<br>
LOOPD DECFSZ COUNT2<br>
GOTO LOOPD<br>
RETLW 0<br>
;主程序<br>
MAIN<br>
BCF STATUS,RP0<br>
CLRF RA<br>
CLRF RB<br>
CLRF INTCON<br>
BSF STATUS,RP0<br>
CLRF TRISA ;RA口为输出口<br>
MOVLW 1<br>
MOVWF TRISB ;RB0为输入口<br>
CLRF EECON1<br>
BCF STATUS,RP0<br>
BSF INTCON,GIE<br>
BSF INTCON,INTE ;开INT中断<br>
LZZ NOP ;等待中断<br>
GOTO LZZ<br>
END<br> </td>
</tr>
</table>
<div align="right">
<p><a href="PIC16Cxxx-9-6.htm">上一页</a> <a href="PIC16Cxxx-9-8.htm">下一页</a>
</p>
</div>
<p><a href="PIC16Cxxx-1.htm">第一章</a> <a href="PIC16Cxxx-2.htm">第二章</a>
<a href="PIC16Cxxx-3.htm">第三章</a> <a href="PIC16Cxxx-4.htm">第四章</a>
<a href="PIC16Cxxx-5.htm">第五章</a> <a href="PIC16Cxxx-6.htm">第六章</a>
<a href="PIC16Cxxx-7.htm">第七章</a> <a href="PIC16Cxxx-8.htm">第八章</a>
<a href="PIC16Cxxx-9.htm">第九章</a> <a href="PIC16Cxxx-10.htm">第十章</a></p></td>
</tr>
</table>
<p> </p>
<p> </p>
<table width="700" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20"> </td>
<td> </td>
</tr>
</table>
<table width="700" border="0" cellspacing="0" cellpadding="0">
<tr bgcolor="#990000">
<td height="1" width="634"></td>
</tr>
<tr align="right">
<td height="6"></td>
</tr>
<tr align="right">
<td><font color="#990000" size="2">[ <a href="index.htm">返回</a> ]</font>
</td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
</table></td>
</tr>
</table>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -