SH79F161B I/O 1. SH79F161B SH79F161B IO 30 I/O I/O 4 I/O SH79F161B 30 I/O Px I/O PxCRy I/O PxPCRy x = 0-3 y = IO PxCRy IO x=0-3 y=0-7

Similar documents
2 Keil µ vision 2.1 1) Keil µ vision2 V2.34 µ vision3 2) Sino_Keil.exe Keil c:\keil\ 3) JET51 USB PC C:\Keil\ USB PC 4) S-L

1-1 SH79F6431 A. 2( ) 9~15V ( 12V) U2 U3 3.3V SH79F B. 1(VCC/GND) SH79F6431 C. VDDIO SH79F6431 P4 P5 P0.6 P0.7 VDDIO VDDIO=5V D. 2 V 1.0

W77E58中文手册

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

目 录

51 C 51 isp 10 C PCB C C C C KEIL

6 C51 ANSI C Turbo C C51 Turbo C C51 C51 C51 C51 C51 C51 C51 C51 C C C51 C51 ANSI C MCS-51 C51 ANSI C C C51 bit Byte bit sbit

Microsoft Word - 專題封面.doc

2 12

untitled

DPJJX1.DOC

目录

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

Microsoft Word - MSP430 Launchpad 指导书.docx

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS

79F161 V0.2

專題最終版.doc

bingdian001.com

12232A LED LED LED EL EL CCFL EL CCF

5. P0.0 P0.7 P0 4 2 P0.3~P0.6 ADC P1.0 P P1.2(SCL) P1.3(SDA) P1.5 RST P1.5 2 XTAL1(P2.1) 1 XTAL0(P2.0) 2 XTAL1 I/O VDD VSS 6. H5815 4T 16K Flas

Microsoft Word - ISSFA-0134_A_AP_User-definedDownload_SC_.doc

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x

CC213

单片机原理及应用实验指导书.doc

G80F915

1

79F161 V0.2

PIC16F F MPLAB 08 16F LED 15 LED

+00DE _01EN.book

从MCS51向AVR的快速转换.PDF

PCM-3386用户手册.doc

中文手册

2 14 PORTC.1 PORTB.3 PORTA.2/T0 GND PORTB.2 PORTA.0 PORTC.3 PORB.0/OSCO PORTB.1/OSCI PORTC.0 PORTC.2 SH69P21 /SOP PORTA

JLX

ICD ICD ICD ICD ICD

T stg -40 to 125 C V cc 3.8V V dc RH 0 to 100 %RH T a -40 to +125 C -0.3 to 3.6V V -0.3 to VDD+0.3 V -10 to +10 ma = 25 = 3V) VDD

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

untitled

C语言的应用.PDF

FM1935X智能非接触读写器芯片

四位微控制器ML64168_ _.doc

2005.book

untitled

Hz 10MHz 0.5V 5V 0.01% 10s 2 0.5V 5V 1Hz 1kHz 10% 90% 1% 3 1Hz 1MHz 1% EPM7128SLC84-15 LM361 LM361 Zlg

Tel:

untitled

General Description: Preliminary TTP916 Consumer IC VCD/DVD LCD Green mode Stand-by mode( 1W ) Features: 2.2V-5.5V LCD RAM read condition 2.6V-5.5V RC

2 PIC PIC 1 / CPU PIC MCU PIC RC

Section1_16bit Arc.ppt

逢甲大學

行业

<4D F736F F D20CBABC1FA DA3A8BAACB6C1D0B44D31A3A9C4A3BFE9D7CAC1CF B0E62E646F63>

RESET OSCO OSCI OSC CPU WDTEN RC RESET PRESCALER PORTA (4-BITS) WATCHDOG TIMER Power on PORTB (4-BITS) PORTA [0:3] PORTB [0:3] LPD PORTC (4-BITS) LPDO

第10章:CCP捕捉/比较/脉宽调制

<4D F736F F D20B9F9B0EABBCDBBAFAB48DEB3B4C1A5BDB3F8A7692E646F63>

Microsoft Word - ~ doc

1.1 ML_ONOFF = 1 Q 3 Q 8 C 0.3V M 2 L 1 ML_ONOFF = 0 Q 3 Q 8 C 1. + R31 VCC R21 10K ML_ONOFF R15 0:off 1:on 1K Green Light VCC=5V L1 Q VDD=12V C

USB解决方案.ppt

( RMB100,000)

SH79F326应用指南

µPSD3000 系列

untitled

79F161 V0.2

ISO h.PDF

行业

SH69P481 4K 12 ADC 4 SH6610D 12 ADC 4 OTPROM: 4K X 16 RAM: 287 X : - fosc = 30kHz - 4MHz, VDD = 2.4V - 5.5V - fosc = 4MHz - 10MHz, VDD = 4.

ARK-14013/14017/14018

Microsoft Word - IRFWX-A124_A_SM59D03G2_SM59D04G2_PCA_ APN_SC_.doc

untitled

/ / / , DOCNO: SG J REV11-2 -

JTAG ICE PC JTAG ICE JTAG ISP... 5 IDE AVR STUDIO JTAGICE JTAGICE... 12

Microsoft Word - ~ doc

C PICC C++ C++ C C #include<pic.h> C static volatile unsigned char 0x01; static volatile unsigned char 0x02; static volatile unsigned cha

Tel: , Fax: STR-15 STR bps 2400bps 4800bps 9600bps STR : 500mW 2.ISM 433

SMART 7P 0 HR7P OTPMCU A/D I/O OTP ROM RAM HR7P HR7P HR7PPMB MSOP0 7+input HR7PPSC HR7PPSD SOP SOP6 +input input HR7PERB SSOP0 7

DATASHEET SEARCH SITE ==

untitled

CAUTION RISK OF ELECTRIC SHOCK DO NOT OPEN 2

行业

行业

TouchWin Human Machine Interface

79F161 V0.2

79F161 V0.2

tiny15.PDF

规格说明


1 TPIS TPIS 2 2


ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica

/ / / LED DOCNO: SG D REV11-2 -

, STC11F01-35C-SOP16 RMB 1.99 STC10F04-35C-LQFP44 R MB 2. 99

C/C++ - 文件IO

Microsoft PowerPoint - C15_LECTURE_NOTE_15

a b c d e f g C2 C1 2

DR2010.doc

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2

System Design and Setup of a Robot to Pass over Steps Abstract In the research, one special type of robots that can pass over steps is designed and se

2.5 idlocs PIC idloc idloc 0x1234 ; 0x config idloc HEX errorlevel errorlevel Error (Warning) Message HEX 3-14 errorlevel

Transcription:

SH79F161B - 10 ADC 8051 V 1.0

SH79F161B I/O 1. SH79F161B 8051 8051 SH79F161B IO 30 I/O I/O 4 I/O SH79F161B 30 I/O Px I/O PxCRy I/O PxPCRy x = 0-3 y = 0-7 2. IO PxCRy IO x=0-3 y=0-7 PxPCRy IO x=0-3 y=0-7 P0OS I/O Px.y IO x=0-3 y=0-7 SH79F161B SPEC 3. IO 3.1. IO IO PxCRy x=0-3 y=0-7 1 Px.y x=0-3 y=0-7 0 IO GND Px.y x=0-3 y=0-7 1 IO VDD 3.2. IO IO PxCRy x=0-3 y=0-7 0 PxPCRy x=0-3 y=0-7 0 IO Floating PxPCRy x=0-3 y=0-7 1 IO IO VDD/2 SH79F161B SPEC 3.3. I/O 1

SH79F161B P0.2~P0.5 N CMOS P0CR2~P0CR5 1 P0OSx x=2-5 0 P0.2~P0.5 N P0OSx x=2-5 1 P0.2~P0.5 CMOS P0.2~P0.5 N P0.2~P0.5 4. 4.1. 0~5V P3.0 P3.0 P1.0 4.2. bit a Void main void P3CR &= 0xFE; //P3.0 P3PCR = 0x01; //P3.0~P3.5 P1CR = 0x01; // P1.0 while(1) a = P3.0; P1.0 = a; // P1.0 P3.0 2

SH79F161B Flash&EEPROM 1. SH79F161B 8051 8051 SH79F161B Flash&EEPROM Flash 16 * 1KB 16KB EEPROM 8 * 256 BYTE 2KB ICP / SSP / 10,000 EEPROM 100,000 10 FFFFH Reserved (no use) 4000H (16K) 0800H Program Memory Block EEPROM Like Data Block 0000H Information Block 0000H Program Memory Block SH79F161B 16K Flash Program Memory Block ICP SSP Flash 1024 SH79F161B 2048 EEPROM 256 8 3

2. Flash&EEPROM XPAGE IB_OFFSET IB_DATA IB_CON1 IB_CON2 IB_CON3 IB_CON4 IB_CON5 FLASHCON SSP SSP 1 SSP 2 SSP 3 SSP 4 SH79F161B SPEC 3. SSP 3.1. Flash SSP SSP Flash FLASHCON FAC 0 XPAGE IB_OFFSET IB_DATA IB_CON1 IB_CON1 0xE6 IB_CON1 0x6E IB_CON2 0x05 IB_CON3 0x0A IB_CON4 0x06 IB_CON5 0x09 Flash SSP SSP SSP Keil Options->Utilities-> Scurity Sector B0 Flash 0 B1 Flash 1 Flash SH79F161B SPEC 4

3.2. EEPROM SSP SSP EEPROM FLASHCON FAC 1 XPAGE IB_OFFSET IB_DATA IB_CON1 IB_CON1 0xE6 IB_CON1 0x6E IB_CON2 0x05 IB_CON3 0x0A IB_CON4 0x06 IB_CON5 0x09 EEPROM Flash 3.3 3.3. Flash & EEPROM Set FLASHCON S0 Set IB_OFFSET Set XPAGE Set IB_DATA Set IB_CON1 IB_CON2[3:0] 5H Set IB_CON2[3:0]=5H IB_CON2 5H S1 IB_CON3 AH IB_CON2 5H ELSE S2 Set IB_CON3=AH IB_CON3 AH Set IB_CON4=9H Reset IB_CON1-5 IB_CON4 9H S3 S4 Set IB_CON5=6H Sector Erase IB_CON1=E6H &IB_CON2[3:0]=5H &IB_CON3=AH &IB_CON4=9H &IB_CON5=6H IB_CON1=6EH &IB_CON2[3:0]=5H &IB_CON3=AH &IB_CON4=9H &IB_CON5=6H Programming 5

4. 4.1. Flash sector0 00 sector1 01 sector15 0F 4.2. #include <sh79f161b.h> #include <intrins.h> #include <absacc.h> #define uchar unsigned char #define uint unsigned int #define NOP _nop_(); uchar i,j,m,n; uint code *p; uchar count = 0; uchar Ssp_flag; void main (void) uchar temp; CLKCON = 0; m = 0; n = 0; Ssp_flag = 0xA5; /********************sector erase****************/ EA = 0; for(i=0x00;i<0x40;i++) FLASHCON = FLASHCON&0xFE; NOP EA = 0; IB_CON1 = 0xE6; IB_CON2 = 0x05; IB_CON3 = 0x0A; IB_CON4 = 0x09; if(!(ssp_flag==0xa5)) goto Error; 6

XPAGE = i&0xfc; IB_CON5 = 0x06; NOP NOP NOP NOP NOP for(j=0x00;j<0xff;j++) p = (uint)(i<<8)+j; temp = *p; /********************sector write****************/ temp = 0x00; for(m=0x04;m<0x40;m++) for(n=0x00;n<0xff;n++) temp = m; FLASHCON = FLASHCON&0xFE; NOP EA = 0; IB_OFFSET = n; IB_DATA = temp; IB_CON1 = 0x6E; IB_CON2 = 0x05; IB_CON3 = 0x0A; IB_CON4 = 0x09; if(!(ssp_flag==0xa5)) goto Error; XPAGE = m; IB_CON5 = 0x06; NOP NOP NOP NOP 7

NOP while(1); Error: Ssp_flag = 0; IB_CON1 = 0x00; IB_CON2 = 0x00; IB_CON3 = 0x00; IB_CON4 = 0x00; IB_CON5 = 0x00; XPAGE = 0x00; FLASHCON = 0x00; EA = 0; while(1); 8

5. SSP (1) / 1. 2. XPAGE IB_OFFSET 3. IB_DATA 4. IB_CON1-5 5. 4 NOP 6. CPU IDLE IDLE 7. 2 8. XPAGE 0 (2) 1. 2. XPAGE 3. IB_CON1-5 4. 4 NOP 5. CPU IDLE IDLE 6. 2 7. XPAGE 0 (3) MOVC A,@A+DPTR MOVC A,@A+PC (4) EEPROM EEPROM Flash (1)/(2)/(3) 1. EEPROM FLASHCON FAC 1 2. EEPROM 256 1024 1. 200kHz FLASH 2. EEPROM FAC 0 9

6. FLASH/ EEPROM / 1 enable LVR function 2 XPAGE 3 0A5H 0A5H EEPROM C uchar Ssp_flag; /********************SSP Erase****************/ Ssp_flag = 0xA5; EA = 0; FLASHCON = 0x01; IB_CON1 = 0xE6; IB_CON2 = 0x05; IB_CON3 = 0x0A; IB_CON4 = 0x09; if(!(ssp_flag==0xa5)) goto Error; XPAGE = 0x01; //XPAGE IB_CON5 = 0x06; NOP NOP NOP NOP /********************sector write****************/ Ssp_flag = 0x5A; EA = 0; FLASHCON = 0x01; IB_DATA = data; //data IB_OFFSET = addr; //addr IB_CON1 = 0x6E; IB_CON2 = 0x05; IB_CON3 = 0x0A; IB_CON4 = 0x09; 10

if(!(ssp_flag==0x5a)) goto Error; XPAGE = 0x01; // IB_CON5 = 0x06; NOP NOP NOP NOP while(1); Error: Ssp_flag = 0; IB_CON1 = 0x00; IB_CON2 = 0x00; IB_CON3 = 0x00; IB_CON4 = 0x00; IB_CON5 = 0x00; XPAGE = 0x00; FLASHCON = 0x00; EA = 0; while(1); 11

SH79F161B Timer0/1 1. SH79F161B 8051 8051 SH79F161B Timer0/1 0/1 8051 0/1 SH79F161B 0/1 13 16 8 8 Timer0 8 / TMOD Mx1 - Mx0 [THx & TLx x = 0,1 ] 16 TCON TMOD IEN0 ET0 ET1 1 0 1 SH79F161B SPEC 2. Timer0/1 TCON TCON1 TMOD TL0 TH0 TL1 TH1 1 Timer0 Timer0 Timer1 Timer1 SH79F161B SPEC 3. Timer0/1 3.1. 0 0 x x = 0,1 13 / THx 13 / 8 TLx 5 TLx.4-TLx.0 TLx TLx.7-TLx.5 13 TFx x C/Tx / C/Tx = 1 x Tx x 1 C/Tx = 0 x GATEx = 0 GATEx = 1 INTx TRx 1 GATEx 1 INTx INTx TRx 1 TRx 1 TRx 0 12

TCON1 TCLKPx x = 0, 1 1/12 x x = 0, 1 TCON1 TC0/1 0/1 T0/T1 TC0/1 1 T0/T1 System Clock 1/12 Tx INTx TCLKPx GATEx TRx =0 C/Tx =1 + & TLx (5bits) 0:Switch Off 1:Switch On THx (8bits) Overflow C/Tx=0 and TCx=1 TFx Overflow Flag The Block Diagram of mode0 of Timerx ( x=0,1 ) Interrupt Request Tx 3.2. 1 16 / 1 0 / 0 System Clock 1/12 Tx INTx GATEx TCLKPx =0 C/Tx =1 + TLx (8bits) 0:Switch Off 1:Switch On THx (8bits) Overflow C/Tx=0 and TCx=1 TFx Overflow Flag Interrupt Request Tx TRx & The Block Diagram of mode1 of Timerx ( x=0,1 ) 3.3. 2 2 x 8 / TLx THx TLx 0x00 TFx THx TLx TFx 1 THx TLx 2 / 1 0 TCON1 TCLKPx x = 0, 1 1/12 x x = 0, 1 TCON1 TC0/1 0/1 T0/T1 TC0/1 1 T0/T1 13

System Clock 1/12 TH0 (8bits) Reload TCLKPx Tx INTx GATEx TRx =0 C/Tx =1 + & TL0 (8bits) 0:Switch Off 1:Switch On overflow C/Tx=0 and TCx=1 TFx Overflow Flag The Block Diagram of mode2 of Timerx (x=0,1) Interrupt Request Tx 3.4. 3 3 0 8 / TL0 TH0 TL0 0 TCON TMOD TR0 C/T0 GATE0 TF0 TL0 TH0 TH0 1 TR1 1 TF1 1 1 0 3 1 0 1 2 1 TF1 TH1 TL1 GATE1 T1 1 TR1 0 1 0 1 2 3 TCON1 TCLKP0 1/12 0 TCON1 TC0 0 T0 TC0 1 T0 T0 INT System Clock TCLKP0 GATE0 TR0 1/12 =0 C/T0 =1 + & TL0 (8bits) 0:Switch Off 1:Switch On Overflow C/T0=0 and TC0=1 TF0 Overflow Flag Interrupt Request T0 System Clock 1/12 TH0 (8bits) Overflow TF1 Interrupt Request TR1 TCLKP0 0:Switch Off 1:Switch On Overflow Flag The Block Diagram of mode3 of Timer0 0/1 T0/T1 --- 1/2 INTx 1/4 1 TH1/TL1 14

4. 4.1. 0 #include <sh79f161b.h> #include <intrins.h> void Port_init(void) P1 = 0x00; P1CR = 0x01; //P1.0 void init_timer0() //13 IEN0 = 0x82; // 0 TMOD = 0x00; // Timer0 0 TCON1 = 0x00; // 0 TL0 = 0x11; // Timer0 0x1B31 TH0 = 0xD9; TR0 = 1; // Timer0 void main() Port_init(); init_timer0(); while(1); void INT_TIMER0(void) interrupt 1 TF0 = 0; P1_0 = ~P1_0; //P1.0 200us 5kHz TL0 = 0x11; // Timer0 0x1B31 TH0 = 0xD9; 15

4.2. 1 #include <sh79f161b.h> #include <intrins.h> void Port_init(void) P1 = 0x00; P1CR = 0x01; //P1.0 void init_timer0() //16 IEN0 = 0x82; // 0 TMOD = 0x01; // Timer0 1 TCON1 = 0x00; // 0 TL0 = 0x31; // Timer0 0xFB31 TH0 = 0xFB; TR0 = 1; // Timer0 void main() Port_init(); init_timer0(); while(1); void INT_TIMER0(void) interrupt 1 TF0 = 0; P1_0 = ~P1_0; //P1.0 200us 5kHz TL0 = 0x31; // Timer0 0xFB31 TH0 = 0xFB; 16

4.3. 2 #include <sh79f161b.h> #include <intrins.h> void Port_init(void) P1 = 0x00; P1CR = 0x01; //P1.0 void init_timer0() //8 IEN0 = 0x82; // 0 TMOD = 0x02; // Timer0 2 TCON1 = 0x00; // 0 TL0 = 0x09; // Timer0 0x09 TH0 = 0x09; TR0 = 1; // Timer0 void main() Port_init(); init_timer0(); while(1); void INT_TIMER0(void) interrupt 1 TF0 = 0; P1_0 = ~P1_0; //P1.0 40us 25kHz 4.4. 3 #include <sh79f161b.h> #include <intrins.h> void Port_init(void) 17

P1 = 0x00; P1CR = 0x03; //P1.0 P1.1 void init_timer0() // 8 IEN0 = 0x8A; // 0 1 TMOD = 0x03; // Timer0 3 TCON1 = 0x00; // 0 TL0 = 0x09; // 8 0x09 TH0 = 0x84; // 8 0x84 TR0 = 1; // 8 TR1 = 1; // 8 void main() Port_init(); init_timer0(); while(1); void INT_TIMER0(void) interrupt 1 TF0 = 0; P1_0 = ~P1_0; //P1.0 50us 20kHz TL0 = 0x09; // 8 0x09 void INT_TIMER1(void) interrupt 3 TF1 = 0; P1_1 = ~P1_1; //P1.1 25us 40kHz TH0 = 0x84; // 8 0x84 18

SH79F161B Timer2 1. SH79F161B 8051 8051 SH79F161B Timer2 2 8052 2 4 / RCLK TCLK CP/RL2 C/T2 T2OE DCEN TR2 CP/RL RCLK TCLK X 0 X 1 1 0 0 0 16 X 0 0 1 0 0 0 1 16 X 0 1 1 0 0 0 1 X X 0 X 1 X 2 X 1 0 0 3 3 1 1 X 1 X X X X X X 0 X X X X 2 T2EX 0 1 X 1 X 1 X X 1 TH2 TL2 16 T2CON T2MOD IEN0 ET2 2 SH79F161B SPEC 2 C/T2 TR2 2/ 2 2. Timer2 T2CON T2MOD RCAP2L RCAP2H TL2 TH2 19 / / SH79F161B SPEC 3. Timer2 3.1. 0 Timer2 0 16 T2CON CP/RL 1 T2CON EXEN2

EXEN2 = 0 2 16 IET2 2 TF2 EXEN2 = 1 2 T2EX TH2 TL2 RCAP2H RCAP2L T2EX T2CON EXF2 IET2 EXF2 TF2 T2MOD TCLKP2 1/12 2 3.2. 1 Timer2 1 16 T2CON CP/RL 0 16 2 T2MOD DCEN DCEN 0 2 DCEN 2 T2EX DCEN = 0 T2CON EXEN2 EXEN2 = 0 2 0FFFFH TF2 RCAP2H RCAP2L 16 TH2 TL2 EXEN2 = 1 T2EX 16 EXF2 IET2 TF2 EXF2 T2MOD TCLKP2 1/12 2 EXEN2 = 1 C/T2 = 1 T2 [TH2 TL2] 0FFFFH T2 T2EX TF2 EXF2 DCEN 2 DCEN = 1 T2EX EXEN2 T2EX 1 2 0FFFFH TF2 RCAP2H RCAP2L 16 T2EX 0 2 TH2 TL2 RCAP2H RCAP2L TF2 0FFFFH 2 EXF2 17 EXF2 T2MOD TCLKP2 1/12 2 3.3. 2 Timer2 2 Uart0 3.4. 3 Timer2 3 T2 P3.1 50% C/T2 T2OE 2 TR2 T2MOD TCLKP2 1/12 2 T2 50% Clock Out Frequency 1 X f SYS 2X2 65536 [RCAP2H,RCAP2L] = ; TCLKP2 = 0 Clock Out f SYS 1 Frequency = X ; TCKLP2 = 1 2X2X12 65536 [ RCAP2H, RCAP2L] 2 2 20

4. 4.1. 0 #include <sh79f161b.h> #include <intrins.h> #include <absacc.h> unsigned int Val = 0; void main (void) CLKCON = 0; P0CR = 0x02; T2CON = 0x09; T2MOD = 0x00; TL2=0x00; TH2=0x00; EA = 1; ET2 = 1; TR2 = 1; TF2 = 0; while(1); //P0.1 //16 T2EX //Timer2 // // Timer2 // Timer2 //TF void timer2_isr(void) interrupt 5 if(tf2 == 1) TF2 = 0; if(t2con&0x40) T2CON &=0xBF; // T2EX Val=RCAP2H*0x100+RCAP2L; P0_1=~P0_1; //P0.1 T2EX 21

4.2. 1 #include <SH79F161B.H> #include <intrins.h> void Port_init(void) P1 = 0x00; P1CR = 0x01; //P1.0 as outflag void Timer2_init(void) CLKCON = 0x00; //sys clock 12.3MHz T2CON = 0x00; T2MOD = 0x00; TL2 = 0x60; // 5ms interrupt TH2 = 0xEA; RCAP2L = 0x60; RCAP2H = 0xEA; void main(void) Port_init(); Timer2_init(); EA = 1; ET2 = 1; //enable timer2 interrupt TR2 = 1; //enable timer2 count while(1); void timer2_int(void) interrupt 5 TF2 = 0; P1_0 = ~P1_0; //P1.0 10ms 100Hz 22

4.3. 3 #include <SH79F161B.H> #include <intrins.h> void Timer2_init(void) CLKCON = 0x00; T2CON = 0x00; T2MOD = 0x02; RCAP2L = 0x48; RCAP2H = 0Xf4; //sys clock 12.3MHz // Mode3 Program output clock //output clock frequency is 1KHz void main (void) Timer2_init(); TR2 = 1; while(1); //enable Timer2 count //P3.1(T2) output clock frequency is 1KHz 23

SH79F161B SPI 1. SH79F161B 8051 8051 SH79F161B SPI 6 MCU LSB MSB SPI MCU MCU SPI 3 SS 4 V DD MISO MOSI SCK SS Master Port0.0 Port0.1 Port0.2 Port0.3 MISO MOSI SCK SS MISO MOSI SCK SS MISO MOSI SCK SS MISO MOSI SCK SS Slave Slave Slave Slave SPI SPCON SPSTA SPDAT 24 SH79F161B SPEC 2. SPI 2.1. SPI 4 8 16 32 64 128

SPCON SPR[2:0] 2.2. SPI SPI SPCON SPSTA SPCON SPSTA SPDAT SPI SCK MOSI MISO SS SPI SPI SPI MOSI MISO SPI SPDAT SPDAT 8-bit Shift Register MISO MISO 8-bit Shift Register MOSI MOSI SPI Clock Generator SCK SS V DD SCK SS Master MCU Slave MCU V SS (1) SPI SPI SPCON MSTR 1 SPI (2) SPI SPI SPDAT SPI WCOL SCK SPI MOSI SPSTA SPIF 1 SPI SPIF 1 (3) MOSI MISO SPIF 1 MSB LSB SPDAT SPIF 0 RXOV 1 SPIF 1 SPIF 0 SPI 25

(1) SPCON MSTR 0 SPI SS (2) SCK MOSI MISO SCK 8 8 SPIF 1 SPDAT SPI SPIF 1 SPI SPIF RXOV 1 SPIF SPI SPIF 0 SPI SPI 0x00 SPDAT SPI WCOL 1 SPI WCOL 1 SPDAT 2.3. SPSTA SPI (1) MODF SPI SS SPSTA MODF 1 SPI SPI / CPU SPSTA SPEN 0 SPI SPCON MSTR 0 SPCON SS SSDIS 0 SS MODF 1 SS MODF 1 SPCON SSDIS 1 SS I/O MODF 0 SPCON MSTR SPSTA SPEN 1 (2) WCOL SPDAT SPSTA WCOL 1 WCOL 1 WCOL 0 (3) RXOV SPIF SPIF 1 SPI SPIF SPIF RXOV 1 RXOV 0 SPI SPIF & MODF CPU 26

SPIF 1 MODF 1 SS SPI SSDIS 0 MODF 1 SPI / CPU SSDIS 1 MODF SPIF SPI Transmitter CPU Interrupt Request SPI CPU Interrupt Request MODF SSDIS SPI Receiver/Error CPU Interrupt Request SPI 3. 3.1. SCK = SYS/64 SS 0x00~0xFF 3.2. #include <SH79F161B.H> #include <intrins.h> unsigned char out_flag = 0; unsigned char r_data = 0; void spi_init(void) CLKCON = 0x00; SPCON = 0x40; SPCON = 0x08; SPCON = 0x04; SPSTA = 0x00; //SYS = 12.3Mz //Master Mode //disable ss pin //BaudRate = SYS/64 void main(void) spi_init(); EA = 1; 27

IEN1 = 0x01; //enable spi interrupt SPSTA = 0x80; //enable spi SPDAT = 0x00; while(1) if(out_flag == 1) SPDAT ++; out_flag = 0; void spi_interrupt(void) interrupt 7 out_flag = 1; SPSTA &= 0xBF; 28

SH79F161B EUART 1. SH79F161B 8051 8051 SH79F161B EUART SH79F161B 1 EUART 8051 EUART 1/2 EUART EUART SCON SBUF PCON SADDR SADEN RXCON EUART EUART EUART EUART SH79F161B SPEC RXD 29

2. EUART EUART 4 SCON 1 3 1 2 SBUF 0 RI = 0 REN = 1 TxD RxD 8 REN = 1 EUART SM0 SM1 9 0 0 0 SYSCLK/(4 12) 8 0 1 1 1 2 /(16 32) 10 1 1 1 0 2 SYSCLK/(32 64) 11 1 1 0, 1 1 1 3 1 2 /(16 32) 11 1 1 0, 1 2.1. 0 0 SM2 SCON.5 0 1 1/12 1/4 SM2 0 1/12 1 1/4 SBUF Tx 0 8 Tx TI 1 SCON.1 REN SCON.4 1 RI SCON.0 0 8 Rx RI 1 0 2.2. 1 1 10 10 0 8 1 8 SBUF RB8 SCON.2 1 1 1/16 1/32 2 1/16 1 0 0 REN 1 RxD CPU RxD 16 16 16 RxD 16 16 7 8 9 RXD 3 2 0 RxD 8 1 SBUF RB8 RI 1 1. RI = 0 2. SM2 = 0 = 1 30

RB8 8 SBUF RI 1 RxD RI 2.3. 2 2 11 0 8 9 1 2 9 SCON TB8 0 1 PSW P / 9 RB8 PCON SMOD 1/32 1/64 2 0 0 REN 1 RxD CPU RxD 16 16 16 RxD 16 16 7 8 9 RXD 3 2 0 RxD 9 1 SBUF RB8 RI 1 1. RI = 0 2. SM2 = 0 9 = 1 9 RB8 8 SBUF RI 1 RxD RI 2.4. 3 3 2 1 2.5. EUART 0 1/12 1/4 SM2 SM2 0 1/12 SM2 1 1/4 1 3 1 2 TCLK T2CON.4 RCLK T2CON.5 1 2 TX RX TCLK RCLK 1 2 TCLK RCLK 0 1 Tx Rx 1 3 TH1 1 8 SMOD EUART PCON.7 [RCAP2H, RCAP2L] 2 16 T1CLK 1 T2CLK 2 2 1 SMOD ft BaudRate = 1 1 2 32 256 TH1 1 f SYS BaudRate = 2 2 2 16 65536 [ RCAP2H, RCAP2L] 1 f SYS /12 BaudRate = 2 2 2 16 65536 [ RCAP2H, RCAP2L] 31

/12 1 ft 2 BaudRate = 2 2 T2 16 65536 [ RCAP2H, RCAP2L] 2 1/32 1/64 SMOD PCON.7 SMOD 0 EUART 1/64 SMOD 1 EUART 1/32 SMOD f SYS BaudRate = 2 ( ) 64 2.6. EUART 5V UART 3V SH79F161B EUART RXD RXDCON RXDCON0=0 RXD 0.8VDD 0.2VDD SH79F161B VDD=5V RXD 4V 1V 3V UART RXDCON0=1 RXD 0.55VDD 0.2VDD SH79F161B VDD=5V RXD 2.75V 1V 3V RXDCON EUART 32

3. 3.1. EUART EUART 9600 1 8 1 3.2. EUART #include <SH79F161B.H> unsigned char r_data; unsigned char out_flag; void uart0_init(void) CLKCON = 0x00; //SYS Clock is 12.3MHz SCON = 0x40; PCON = 0x00; //MODE 1 RXDCON = 0x00; void io_init(void) P2CR = 0x02; //P2.1 OUTPUT/TXD P2.0 INPUT PULL-HIGH/RXD P2PCR = 0x01; P2 = 0x02; void timer2_init(void) T2CON = 0x30; //Timer2 as Baud Rate Generator T2MOD = 0x00; RCAP2L = 0xD8; RCAP2H = 0xFF; TL2 = 0xD8; TH2 = 0xFF; //Baud Rate is 9600 void main(void) 33

uart0_init(); io_init(); timer2_init(); r_data = 0x00; out_flag = 0; TI = 0; RI = 0; IEN0 = 0x90; REN = 1; TR2 = 1; while(1) if(out_flag == 1) SBUF = r_data; out_flag = 0; void uart0_int(void) interrupt 4 if(ti == 1) TI = 0; else if(ri == 1) r_data = SBUF; RI = 0; out_flag = 1; //transmit received data 34

SH79F161B ADC 1. SH79F161B 8051 8051 SH79F161B ADC 10 8 SH79F161B 10 / ADC V REF V DD VREF 8 ADC GO/DONE ADC ADCON ADCIF ADC ADC ADC ADCON EC 1 ADC ADCON ADON 1 ADDH/L ADC GO/DONE 1 GO/DONE 0 ADC Idle ADC Idle ADC ADC 35

ADC 2. ADC ADCON ADT ADCH ADDL ADDH RXDCON 36 2 8 SH79F161B SPEC ADC ADC (1) (2) ADC (3) 10us (4) GO/DONE 1 ADC (5) GO/DONE 0 ADCIF = 0 ADCIF = 1 ADC ADC (6) ADDH/ADDL (7) 4-6 (1) (2) ADDH/ADDL (3) EC 1 (4) ADC (5) 10us (6) GO/DONE 1 (7) ADIF 1 ADC ADC 0 ADCIF (8) GO/DONE 0 (1) AVREF REFC = 1 P1.6 V REF (2) ADON 1 10us GO/DONE = 1 AD (3) ADC tad µs 1 (4) TS[3:0] = 0000 2tAD TS[3:0] = 1111 15tAD (5) TS[3:0] ADC (6) 2*tAD ADC 10k (7) = 12tAD +

3. 3.1. AN0 AN1 AN2 Vref = Vdd Uart0 AN0:xxxAN1:xxxAN2:xxx xxx 3.2. #include <SH79F161B.H> #include <intrins.h> unsigned char adc_ch = 0; unsigned char adc_h = 0; unsigned char adc_m = 0; unsigned char adc_l = 0; unsigned char outflag = 0; void uart_init(void) CLKCON = 0x00; //SYS Clock is 12MHz SCON = 0x40; PCON = 0x00; //MODE 1 void timer2_init(void) T2CON = 0x30; T2MOD = 0x00; TL2 = 0xD8; TH2 = 0xFF; RCAP2L = 0xD8; //Timer2 as BaudRate Generrator RCAP2H = 0xFF; //BaudRate is 9600 TR2 = 1; //Timer2 GO void adc_init(void) ADCON = 0x80; //enable adc module Vref = Vdd RXDCON = 0x00; //P1.6 is IO, use build-in VREF ADT = 0x81; //Tad = 12sys sample time is 2Tad ADCH = 0x07; //ANO,AN1,AN2 is selected otehrs is IO 37

ADDL = 0x00; ADDH = 0x00; //clear adc result register void main(void) uart_init(); timer2_init(); adc_init(); EA = 1; EADC = 1; ADCON &= 0xF1; ADCON = 0x01; RI = 0; TI = 0; while(1) if(outflag == 1) outflag = 0; //enable interrupt //enable adc interrupt //select AN0 //ADC GO adc_h = (ADDH>>6)&0x03; adc_h = adc_h+0x37; adc_m = (ADDH>>2)&0x0F; if(adc_m > 0x09) adc_m = adc_m+0x37; if(adc_m < 0x0A) adc_m = adc_m+0x30; adc_l = (ADDH<<2)&0x0C+ADDL; 38

if(adc_l > 0x09) adc_l = adc_l+0x37; if(adc_l < 0x0A) adc_l = adc_l+0x30; switch(adc_ch) case 1: SBUF = 'A'; while(!ti); TI = 0; SBUF = 'N'; while(!ti); TI = 0; SBUF = '0'; while(!ti); TI = 0; SBUF = ':'; while(!ti); TI = 0; SBUF = adc_h; while(!ti); TI = 0; SBUF = adc_m; while(!ti); TI = 0; SBUF = adc_l; while(!ti); TI = 0; ADCON &= 0xF1; ADCON = 0x02; //select AN1 39

ADCON = 0x01; break; //ADC GO case 2: SBUF = 'A'; while(!ti); TI = 0; SBUF = 'N'; while(!ti); TI = 0; SBUF = '1'; while(!ti); TI = 0; SBUF = ':'; while(!ti); TI = 0; SBUF = adc_h; while(!ti); TI = 0; SBUF = adc_m; while(!ti); TI = 0; SBUF = adc_l; while(!ti); TI = 0; ADCON &= 0xF1; ADCON = 0x04; ADCON = 0x01; break; //select AN2 //ADC GO case 3: SBUF = 'A'; while(!ti); TI = 0; SBUF = 'N'; while(!ti); 40

TI = 0; SBUF = '2'; while(!ti); TI = 0; SBUF = ':'; while(!ti); TI = 0; SBUF = adc_h; while(!ti); TI = 0; SBUF = adc_m; while(!ti); TI = 0; SBUF = adc_l; while(!ti); TI = 0; adc_ch = 0; ADCON &= 0xF1; //select AN0 ADCON = 0x01; //ADC GO break; default: break; void adc_int(void) interrupt 6 ADCON &= 0xBF; adc_ch++; outflag = 1; 41

SH79F161B PWM0 1. SH79F161B 8051 8051 SH79F161B PWM0 6 PWM PWM SH79F161B 12 PWM 8 PWM PWM PWM PWM0/1/2 PWM EFLT PWM FLT PWM PWM0/1/2 3 PWM PWM SH79F161B 8 PWM PWM PWM1/2C PWM1/2 PWMP1/2 PWM1/2 PWMD1/2 PWM1/2 SH79F161B 3 PWM PWM01 PWM11 PWM21 PWM01/11/21 PWM0/1/2 PWM EPWM01/11/21 1 PWM01/11/21 PWMn output (PWMnS = 0) n = 0,1 or 2 PWMn1 output (PWMnS = 0) n =0,1 or 2 PWMn PWMn1 (1) PWM0/1/2 PWM01/11/21 (2) EFLT FLT PWM01/11/21 PWM0/1/2 PWMnS = 0 PWMnS = 1 42

PWM0 12 PWM 8 PWM PWMEN PWMLO PWM0C PWM0PL PWM0PH PWM0DL PWM0DH PWM0DT PWM1C PWM2C PWM1P PWM2P PWM1D PWM2D PWM1DT PWM2DT 12 PWM0 PWM0 4 PWM0 8 PWM0 8 PWM0 4 8 PWM1 8 PWM2 8 PWM1 8 PWM2 8 PWM1 8 PWM2 PWM1 PWM2 SH79F161B SPEC 2. PWM0 SH79F161B PWM0 PWMLO 55H PWM0 PWMLO 55H PWM PWM0 PWMEN EPWM0 1 PWM0 PWM0 PWM PWM PWM IO PWM0 12 BIT Timer PWM0 PWM PWM0 PWM0 PWMLO 00H SH79F161B 43

3. 3.1. PWM0 2KHz 50% PWM PWM0 3.2. #include <SH79F161B.H> #include <intrins.h> void PWM0_init(void) CLKCON = 0x00; //SYS Clock is 12MHz PWMLO = 0x55; //enable PWM0 register change PWM0C = 0x00; //Disable PWM0 interrupt PWM0 clock is osc/2 PWM0PL = 0xB8; PWM0PH = 0x0B; //PWM0 frequency is 2KHz PWM0DL = 0xDC; PWM0DH = 0x05; //PWM0 Duty is 50% PWM0DT = 0x00; //NO deadtime PWMLO = 0x00; void main(void) PWM0_init(); PWMLO = 0x55; PWMEN = 0x01; //enable PWM0 PWMLO = 0x00; //PWM0(P2.4) output the wave while(1); 44

SH79F161B Buzzer 1. SH79F161B 8051 8051 SH79F161B Buzzer 10 频 选择输 输 2. Buzzer BUZCON SH79F161B SPEC 3. 3.1. Buzzer 12KHz 50% BZ P2.0 3.2. #include <SH79F161B.H> #include <intrins.h> void main() CLKCON = 0x00; BUZCON = 0x07; while(1); // //BZ Fsys/1024 45

SH79F161B Target Board V2.0 SH79F161B Target Board SH79F161B E A D G H I F C B 46

: A. B. C. JET51 JTAG 10 VDD D. 1(VDD/GND) 1 SH79F161B SH79F161B VDD GND 1 E. 2 ( ) 2 9~12V U2 5V SH79F161A 2 5V : 1). 1 2 1 2). 5V(JET51) 1 2 ( ) F. G. P1.7 used as RST pin RESET I/O H. 400K-16M crystal oscillator or ceramic oscillator 2 CRY I/O I. SH79F161B 47

SH79F161B SH79F161A SH79F161B SH79F161A 1. 2. RC 16MHz RC 1% 0.5% 3. SH79F161B SH79F161A EMC 4. UART RXD (3V/5V) 3V 5. P1.6 ADC VREF SH79F161B SH79F161A 1 Table 1 SH79F161A SH79F161B SH79F161A SH79F161B Package LQFP32/QFP44/LQFP44 LQFP32/LQFP44 SH79F161A OSC 12.3MHz±1.0% RC(@RT) 12.3MHz±2.0% RC(TA=-40~+85 C) 400kHz~16MHz Cry/Cer 12.3MHz/16MHz±0.5% RC(@RT) 12.3MHz/16MHz±2.0% RC(TA=-40~+85 C) 400kHz~16MHz Cry/Cer UART UART ADC 8-ch 10-bit ADC 8-ch 10-bit ADC VREF 48

1.0 2015 9 SH79F161B I/O... 1 1.... 1 2.... 1 3. IO... 1 3.1. IO... 1 3.2. IO... 1 3.3. I/O... 1 4.... 2 4.1.... 2 4.2.... 2 SH79F161B Flash&EEPROM... 3 1.... 3 2.... 4 3. SSP... 4 3.1. Flash SSP... 4 3.2. EEPROM SSP... 5 3.3. Flash & EEPROM... 5 4.... 6 4.1.... 6 4.2.... 6 5.... 9 6. FLASH/ EEPROM /... 10 SH79F161B Timer0/1... 12 1.... 12 2.... 12 3. Timer0/1... 12 3.1. 0... 12 3.2. 1... 13 3.3. 2... 13 3.4. 3... 14 49

4.... 15 4.1. 0... 15 4.2. 1... 16 4.3. 2... 17 4.4. 3... 17 SH79F161B Timer2 户... 19 1.... 19 2.... 19 3. Timer2... 19 3.1. 0... 19 3.2. 1... 20 3.3. 2... 20 3.4. 3... 20 4.... 21 4.1. 0... 21 4.2. 1... 22 4.3. 3... 23 SH79F161B SPI... 24 1.... 24 2. SPI... 24 2.1.... 24 2.2.... 25 2.3.... 26 3.... 27 3.1.... 27 3.2.... 27 SH79F161B EUART... 29 1.... 29 2. EUART... 30 2.1. 0... 30 2.2. 1... 30 2.3. 2... 31 2.4. 3... 31 2.5. EUART... 31 2.6. EUART... 32 3.... 33 50

3.1. EUART... 33 3.2. EUART... 33 SH79F161B ADC... 35 1.... 35 2. ADC... 36 3.... 37 3.1.... 37 3.2.... 37 SH79F161B PWM0... 42 1.... 42 2. PWM0... 43 3.... 44 3.1.... 44 3.2.... 44 SH79F161B Buzzer... 45 1.... 45 2.... 45 3.... 45 3.1.... 45 3.2.... 45 规 记录... 49 51