0% found this document useful (0 votes)
74 views50 pages

STM8S Learning (Melec - Ir) 1

Uploaded by

ssPss
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
74 views50 pages

STM8S Learning (Melec - Ir) 1

Uploaded by

ssPss
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 50

Melec.

ir

[email protected] ‫ ﻋﻠﯽ ﻣﺣﻣد ﺷﻔﯾﻌﯽ‬: ‫ﻧوﯾﺳﻧده‬


‫ﻣﯾﮑروﮐﻧﺗرﻟر ‪STM8S‬ﻣﺣﺻول ‪ 8‬ﺑﯾﺗﯽ ﺷرﮐت ‪ ST‬ﻣﯾﺑﺎﺷد ﮐﮫ در ﺷﮑل زﯾر ﻣﯾﺗوان ﻣدل ھﺎی ﻣﺧﺗﻠف از ﻣﺣﺻوﻻت اﯾن ﺷرﮐت را ﺑﺎ ﯾﮑدﯾﮕر ﻣﻘﺎﯾﺳﮫ ﮐرد ‪.‬‬
: ‫از ﻣﺷﺧﺻﺎت ﻗﺎﺑل ﺗوﺟﮫ اﯾن ﻣﯾﮑرو ﻣﯾﺗوان ﺑﮫ ﻣوارد زﯾر اﺷﺎره ﮐرد‬

‫ﻗﯾﻣت ارزان ﺗر ﻧﺳﺑت ﺑﮫ ﻣﯾﮑروﮐﻧﺗرﻟر ھﺎی ﻣﺷﺎﺑﮫ‬ 


‫ ﻧﺎﻧوﻣﺗری‬130 ‫ﺳﺎﺧﺗﮫ ﺷده ﺗوﺳط ﺗﮑﻧوﻟوژی‬ 
up to 20 MIPS at 24 MHz 
10 bit ADC 
SWIM debuge module 
Small size package 
Voltage supply 2.95 V ~ 5.5 V 
... 

:‫ دارای ﭼﮭﺎر ﮔروه ﻣﺧﺗﻠف ﻣﯾﺑﺎﺷد‬STM8S ‫ﻣﯾﮑرو ﮐﻧﺗرﻟر‬

 The STM8S003/005/007 Value line is the entry-level series with a basic feature set.
 The STM8S103/105 Access line offers more features and a larger variety of packages.
 The STM8S207/208 Performance line features a full set of peripherals and provides performance for medium-
to higher-end applications.
 The STM8S Application specific line provides more analog features and dedicated firmware solutions.
‫در اﯾن ﻣﻘﺎﻟﮫ آﻣوزﺷﯽ ﺳﻌﯽ ﺷده اﺳت از ﻣطﺎﻟب اﺿﺎﻓﯽ ﺧودداری ﺷود و ﺑﯾﺷﺗر ﺑر روی ﻣﺳﺎﺋل ﻋﻣﻠﯽ و راه اﻧدازی ﻣﯾﮑرو ﮐﻧﺗرﻟر ﺗﻣرﮐز ﺷود‪.‬‬
‫ﺳﮫ ﮐﺎﻣﭘﺎﯾﻠر ﺑرای اﯾن ﻣﯾﮑروﮐﻧﺗرﻟر وﺟود دارد ‪:‬‬
‫‪ST Visual Develop (STVD) – STMicroelectronics ‬‬
‫‪IAR-EWSTM8 – STMicroelectronics ‬‬
‫‪Raisonance-RIDE - STMicroelectronics ‬‬

‫در اﯾن اﻣوزش از ﮐﺎﻣﭘﺎﯾﻠر ‪ IAR‬و ﻣﯾﮑروﮐﻧﺗرﻟر ‪ STM8S003K3‬اﺳﺗﻔﺎده ﺷده اﺳت ‪ .‬ﻣطﺎﻟب اراﺋﮫ ﺷده ﺑﮫ ﺻورت ﭘﺎﯾﮫ ای ﺑوده ﮐﮫ ﺷﻣﺎ ﻣﯾﺗواﻧﯾد از ھر‬
‫ﻣﯾﮑرو ﮐﻧﺗرﻟر دﯾﮕری ﻧﯾز اﺳﺗﻔﺎده ﮐﻧﯾد ‪.‬‬

‫ﻣطﺎﻟب اراﺋﮫ ﺷده در اﯾن ﻣﻘﺎﻟﮫ آﻣوزﺷﯽ ﺑﮫ ﺷرح زﯾر اﺳت ‪:‬‬
‫آﺷﻧﺎﯾﯽ ﺑﺎ ﻣﺣﯾط ﮐﺎﻣﭘﺎﯾﻠر ‪ IAR‬و اﯾﺟﺎد ﭘروژه ﺟدﯾد‬ ‫‪‬‬
‫ﺗوﺿﯾﺣﺎت ﻣﺧﺗﺻر درﺑﺎره ﻣوارد ﻻزم ﺑرای راه اﻧدازی‬ ‫‪‬‬
‫ﻧﺣوه ﭘروﮔرام ﮐردن ﻣﯾﮑروﮐﻧﺗرﻟر‬ ‫‪‬‬
‫راه اﻧدازی ‪I/O‬‬ ‫‪‬‬
‫راه اﻧدازی ‪ lcd‬ﮐﺎرﮐﺗری‬ ‫‪‬‬
‫راه اﻧدازی ‪watch dog timer‬‬ ‫‪‬‬
‫راه اﻧدازی وﻗﻔﮫ‬ ‫‪‬‬
‫راه اﻧدازی ﺗﺎﯾﻣر‬ ‫‪‬‬
‫راه اﻧدازی ‪ADC‬‬ ‫‪‬‬
‫آﺷﻧﺎﯾﯽ ﺑﺎ ﻣﺣﯾط ﮐﺎﻣﭘﺎﯾﻠر ‪ IAR‬و اﯾﺟﺎد ﭘروژه ﺟدﯾد‪:‬‬

‫ﺷﻣﺎ ﺑرای ﺑرﻧﺎﻣﮫ ﻧوﯾﺳﯽ درون اﯾن ﮐﺎﻣﭘﺎﯾﻠر اﺣﺗﯾﺎج ﺑﮫ ﯾﮏ ﭘروژه درون اﯾن ﮐﺎﻣﭘﺎﯾﻠر دارﯾد ‪ .‬ﺑرای اﯾن ﮐﺎر ﺷﻣﺎ ﻣﯾﺗواﻧﯾد ﭘروژه را ﺧودﺗﺎن ﺑﺳﺎزﯾد و ﯾﺎ از ﯾﮏ ﭘروژه‬
‫‪ template‬اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪ .‬در ﺻورت ﺗﻣﺎﯾل از ﭘروژه ‪ tempalte‬و ﮐﺗﺎﺑﺧﺎﻧﮫ ﻣﯾﺗواﻧﯾد آن را از ادرس زﯾر داﻧﻠود ﻧﻣﺎﯾﯾد‪ .‬ﺣﺗﻣﺎ ﺑﮫ اﯾن ﻣوﺿوع ﺗوﺟﮫ داﺷﺗﮫ ﺑﺎﺷﯾد‬
‫در ﺻورت اﺳﺗﻔﺎده از ﭘروژه ‪ tempalate‬ﺗﻐﯾﯾراﺗﯽ را در ﭘروژه ﻣطﺎﻟﺑق ﺑﺎ ﻧﯾﺎز ﺧود اﻋﻣﺎل ﮐﻧﯾد‪.‬ﻣواردی ﻣﺛل ﻣدل ﻣﯾﮑروﮐﻧﺗرﻟر و ‪ ...‬ﮐﮫ در اداﻣﮫ ﺑﯾﺷﺗر ﺑﺎ آن‬
‫آﺷﻧﺎ ﺧواھﯾد ﺷد‪.‬‬

‫‪Melec.ir‬‬
‫ﺑﻌد ار ﻧﺻب ﻧرم اﻓزار و ﺑﺎز ﮐردن آن ﺑﺎ ﻣﺣﯾط زﯾر روﺑرو ﻣﯾﺷوﯾد‪.‬‬
‫ﺑرای ﺳﺎﺧت ﭘروژه ﻣطﺎﺑق ﺷﮑل از ﻣﻧوی ‪ project‬ﮔزﯾﻧﮫ ‪ Create New Project‬را‬
‫اﻧﺗﺧﺎب ﻧﻣﺎﯾﯾد‪.‬‬

‫در ﻗﺳﻣت ﺑﻌد زﺑﺎن ﺑرﻧﺎﻣﮫ ﻧوﯾﺳﯽ را اﻧﺗﺧﺎب و ﮔزﯾﻧﮫ ‪ Ok‬را اﻧﺗﺧﺎب ﮐﻧﯾد‪.‬‬
‫در اﯾن ﻗﺳﻣت ﻣﺳﯾری ﺑرای ‪ save‬ﮐردن ﭘروژه‬
‫اﻧﺗﺧﺎب ﻧﻣﺎﯾﯾد و ﮔزﯾﻧﮫ ‪ save‬را اﻧﺗﺧﺎب ﮐﻧﯾد‪.‬‬
‫ﺷﻣﺎ ﺑﺎﯾد ﺗﻣﺎﻣﯽ ﻓﺎﯾل ھﺎ و ‪ workspace‬را ﻧﯾز ‪ save‬ﮐﻧﯾد‪ .‬ﺑرای اﯾن ﮐﺎر از ﻣﻧوی ‪ file‬ﮔزﯾﻧﮫ ‪save All‬‬
‫را اﻧﺗﺧﺎب ﻧﻣﺎﯾﯾد ‪.‬و ﺗﻣﺎﻣﯽ ﻓﺎﯾل ھﺎ و ‪ workspace‬را ‪ save‬ﻧﻣﺎﯾﯾد‪.‬‬

‫در اداﻣﮫ ﺑرای اﻧﺗﺧﺎب ﻧوع ﻣﯾﮑروﮐﻧﺗرﻟر و‬


‫ﺗﻧظﯾﻣﺎت ﭘروژه از ﻣﻧوی ‪ project‬ﮔزﯾﻧﮫ‬
‫‪ Options‬را اﻧﺗﺧﺎب ﮐﻧﯾد‪.‬‬
‫از ﻗﺳﻣت ‪General option‬‬
‫و ﺳرﺑرگ ‪ Target‬در ﻗﺳﻣت‬
‫‪ Device‬ﻣﯾﮑرو ﮐﻧﺗرﻟر ﻣورد‬
‫ﻧظر ﺧود را اﻧﺗﺧﺎب ﻧﻣﺎﯾﯾد‪.‬‬
‫ھﻣﭼﻧﯾن از ﺳرﺑرگ ‪ Stack/Heap‬ﻣﯾﺗواﻧﯾد ﻓﺿﺎی ﻣرﺑوط ﺑﮫ ﺣﺎﻓظﮫ ﭘﺷﺗﮫ‬
‫ﻣﻘداردھﯽ ﻧﻣﺎﯾﯾد‪.‬‬

‫در ﻗﺳﻣت ‪ c/c++ compiler‬و از ﺳرﺑرگ ‪ preprocessor‬ﻣﯾﺗواﻧﯾد‬


‫اﮔر از ﻓﺎﯾل و ھدر ﻓﺎﯾل ﻏﯾر از ھدرﻓﺎﯾل ھﺎی ﮐﺎﻣﭘﺎﯾﻠر اﺳﺗﻔﺎده ﻣﯾﮑﻧﯾد ﻣﺳﯾر آن را‬
‫ﻣﻌرﻓﯽ ﻧﻣﺎﯾﯾد‪ .‬ﺷﻣﺎ اﮔر از ﭘروژه ھﺎی ‪ template‬اﺳﺗﻔﺎده ﮐﻧﯾد در اﯾن ﻗﺳﻣت‬
‫ﻣﯾﺗواﻧﯾد ﻣﺳﯾرھﺎی ﻣﻌرﻓﯽ ﺷده را ﻣﺷﺎھده ﮐﻧﯾد‪.‬‬
‫ﺑرای ﺳﺎﺧت ﻓﺎﯾل ‪ hex‬ﺑﺎﯾد در ﻗﺳﻣت ‪Output Converter‬‬
‫و ﺳرﺑرگ ‪ Output‬ﺗﯾﮏ ‪ Generate additional‬را زده‬
‫و در ﻗﺳﻣت ‪ Output format‬ﮔزﯾﻧﮫ ‪intel extended‬‬
‫را اﻧﺗﺧﺎب ﻧﻣﺎﯾﯾد‪.‬‬

‫ھﻣﭼﻧﯾن در ‪ workspace‬ﺧود ﻣﯾﺗواﻧﯾد ﮔزﯾﻧﮫ ‪ Debuge‬و ﯾﺎ ‪ Release‬را‬


‫اﻧﺗﺧﺎب ﻧﻣﺎﯾﯾد‪.‬‬
‫ﺑﻌد از ﺳﺎﺧت ﭘروژه و ﻧوﺷﺗن ﮐد ﻣورد ﻧظر ﻧوﺑت ﺑﮫ ‪ compile‬ﺑرﻧﺎﻣﮫ ﻣﯾرﺳد ﺷﻣﺎ ﺑرای اﯾن ﮐﺎر ﻣﯾﺗواﻧﯾد از ﮔزﯾﻧﮫ ‪ compile‬ﯾﺎ ‪ make‬در ﻧرم اﻓزار ﺧود‬
‫ﻣطﺎﺑق ﺷﮑل زﯾر اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪ .‬و ﯾﺎ از ﮐﻠﯾد ھﺎی ﻣﯾﺎﻧﺑر ‪ F7‬و ﯾﺎ ‪ Ctrl+F7‬اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪.‬‬
‫ در ﻗﺳﻣت‬.‫ ﭘروژه ﺧود ﮐرده و ﮔزﯾﻧﮫ ﮐﺎﻣﭘﺎﯾل را ﺑزﯾد‬main.c ‫ﺑرای ﺗﺳت ﮐﺎﻣﭘﺎﯾﻠر و اطﻣﯾﻧﺎن ﭘﯾدا ﮐردن از درﺳﺗﯽ ﻧﺻب ﻧرم اﻓزار ﮐدھﺎی زﯾر را وارد ﻓﺎﯾل‬
.‫ھﺎی ﺑﻌد در ﻣورد ﮐدھﺎی وارد ﺷده ﺗوﺿﯾﺢ داده ﻣﯾﺷود‬

#include <iostm8s003f3.h>

void delay_ms(unsigned long int n)


{
unsigned long int x=0;
unsigned long fCPU=2000000; // HSI RC =16 MHz ----- HSIDIV=8 ------CPUDIV=1 fCPU=16 / 8 / 1 Mhz

x=fCPU/1000;
x=x/50;
n=n*x;
while (n-- > 0);
}

//main entry point


int main( void )
{
CLK_ICKR=1; // High-speed internal RC on = 16 Mhz
CLK_CKDIVR = 24; //fHSI RC output/8 & fCPU=fMASTER/1

PD_ODR = 0; //Turn off all pins


PD_DDR_DDR3 = 1; //PortD, Bit 3 is output (PD3 - Data Direction Register)
PD_CR1_C13 = 1; //PortD, Control Register 1, Bit 3 (PD3) set to Push-Pull
PD_CR2_C23 = 1; //PortD, Control Register 2, Bit 3 (PD3) Output speed up to 10 MHz

while (1)
{

//Turn on and off the output and then delay


PD_ODR_bit.ODR3 = !PD_ODR_bit.ODR3;
delay_ms(500);
}
}
‫در ﺻورت درﺳت ﺳﺎﺧﺗن ﭘروژه و‬
‫ﺻﺣت ﮐدھﺎ در ﻗﺳﻣت ‪Messages‬‬
‫ﺑﺎﯾد ﻣطﺎﺑق ﺷﮑل ھﯾﭻ ﮔوﻧﮫ ‪ error‬و‬
‫‪ warning‬وﺟد ﻧداﺷﺗﮫ ﺑﺎﺷد‪ .‬و ھﻣﭼﻧﯾن‬
‫ﻓﺎﯾل ‪ hex‬درون ﭘوﺷﮫ ﭘروژه ﻣوﺟود‬
‫ﺑﺎﺷد‪.‬‬

‫در اﯾن ﻗﺳﻣت ﺳﺎﺧت ﭘروژه و ﺗﻧظﯾﻣﺎت‬


‫ﻣرﺑوط ﺑﮫ آن ﺑﮫ ﭘﺎﯾﺎن رﺳﯾده و در‬
‫ﺻورت ﻧﺑود ﻣﺷﮑل ﺑﮫ ﻣرﺣﻠﮫ ﺑﻌد ﺑروﯾد‪.‬‬
‫ﺗوﺿﯾﺣﺎت ﻣﺧﺗﺻر درﺑﺎره ﻣوارد ﻻزم ﺑرای راه اﻧدازی‪:‬‬
‫در اﯾن آﻣوزش ﮐﻠﯾﮫ ﻣﺛﺎل ھﺎ ﺗوﺳط ﺑرد و ﭘروﮔراﻣر‪ ST-LINK‬ﻣوﺟود در ﺷﮑل راه اﻧدازی ﺷده‬
‫اﺳت‪ .‬ﺷﻣﺎ ﺑرای راه اﻧدازی و ﮐﺎر ﺑﺎ ﻣﯾﮑروﮐﻧﺗرﻟرھﺎی ‪ STM8S‬ﺑﺎﯾد ﺑﮫ ﭼﻧدﯾن ﻣﺳﺋﻠﮫ ﻣﮭم ﺗوﺟﮫ‬
‫ﮐﻧﯾد‪.‬‬

‫‪ ‬ﺗﻐذﯾﯾﮫ ﻣﯾﮑروﮐﻧﺗرﻟر‬
‫‪ ‬ﭘﺎﯾﮫ رﯾﺳت‬
‫‪Clock ‬‬

‫ﭘﺎﯾﮫ ‪ NRST‬ﻣﯾﮑرو ﮐﻧﺗرﻟر را ﺗوﺳط ﯾﮏ ﻣﻘﺎوﻣت ﺑﯾن ‪ 1K-10K‬اھم ﺑﮫ ﺗﻐذﯾﮫ ﻣﺗﺻل‬


‫ﻧﻣﺎﯾﯾد ‪.‬اﯾن ﻣﯾﮑروﮐﻧﺗرﻟر دارای ﯾﮏ رﮔوﻻﺗور داﺧﻠﯽ ﻣﯾﺑﺎﺷد ﮐﮫ ﻧﯾﺎز ﺑﮫ ﯾﮏ ﺧﺎزن ﺧﺎرﺟﯽ‬
‫دارد ‪.‬‬
‫ھﻣﭼﻧﯾن ﺑرای ﭘروﮔرام ﮐردن ﻣﯾﮑروﮐﻧﺗرﻟر ﺗوﺳط ﭘروﺗﮑل ‪ SWIM‬ﺑﺎﯾد ﭘﺎﯾﮫ ﻣورد ﻧظر‬
‫را ﺑﮫ ﭘروﮔراﻣر ﻣﺗﺻل ﻧﻣﺎﯾﯾد ‪.‬ﮐﮫ ﻣﯾﺗواﻧﯾد در ﺷﮑل روﺑرو ﻣﺷﺎھده ﻓرﻣﺎﯾﯾد‪.‬‬
‫در ﺗﻣﺎﻣﯽ ﻣﺛﺎل ھﺎ از اﺳﯾﻼﺗور داﺧﻠﯽ ‪ 16Mhz‬اﺳﺗﻔﺎده ﺷده اﺳت ‪ .‬ﮐﮫ ﺑﺎﯾد در اﺑﺗدای ﺑرﻧﺎﻣﮫ‬
‫ﺗوﺳط رﺟﯾﺳﺗرھﺎ ﺗﻧظﯾم ﺷود‪ .‬در ﺷﮑل ﺻﻔﺣﮫ ﺑﻌد ﻣﯾﺗواﻧﯾد ‪ Block diagram‬اﺳﯾﻼﺗور‬
‫داﺧﻠﯽ را ﻣﺷﺎھده ﻧﻣﺎﯾﯾد‪.‬‬
‫ﭘروﮔرام ﮐردن‪:‬‬
‫ﺷﻣﺎ ﺑرای ﭘروﮔرام ﮐردن ﻣﯾﺗواﻧﯾد ھم از ﻧرم اﻓزار ‪ IAR‬و ھم از ﻧرم اﻓزار اراﺋﮫ ﺷده ﺗوﺳط ﺧود ﺷرﮐت ‪ ST‬اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد ‪ .‬ﺗوﺳط ﻟﯾﻧﮏ زﯾر ﻣﯾﺗواﻧﯾد اﯾن ﻧرم‬
‫اﻓزار را ﻧﺻب و از اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪.‬ﺷﻣﺎ وﻗﺗﯽ اﯾن ﻧرم اﻓزار را ﻧﺻب ﻣﯽ ﮐﻧﯾد ﺑﮫ ھﻣراه آن ﮐﺎﻣﭘﺎﯾﻠر ‪ ST Visual Developl‬ﻧرم اﻓزار ‪ST Visual‬‬
‫‪ Programmer‬ﻧﯾز ﻧﺻب ﻣﯾﺷود‪ .‬ﮐﮫ ﻣﯾﺗواﻧﯾد ﺗوﺳط ﻟﯾﻧﮏ زﯾر آن را ‪ download‬ﻧﻣﺎﯾﯾد‪.‬‬

‫‪http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm8-software-‬‬
‫‪development-tools/stm8-programmers.html?querycriteria=productId=LN2016‬‬

‫در اﺑﺗدا ﺳﺧت اﻓزار ﺧود را ﺗوﺳط ﺷﻣﺎﺗﯾﮏ زﯾر ﺑﮫ ﭘروﮔراﻣر ﻣﺗﺻل ﮐرده و ﺳﭘس ﭘروﮔراﻣر را ﺑﮫ ﮐﺎﻣﭘﯾوﺗر ﻣﺗﺻل ﻧﻣﺎﯾﯾد و ﻣﻧﺗظر ﻧﺻب دراﯾور ﭘروراﻣر ﺷوﯾد‪.‬‬
‫ﺑﻌد از اﺟرای ﻧرم اﻓزار ‪ST Visual‬‬
‫‪ Programmer‬ﺑﺎ ﺻﻔﺣﮫ زﯾر روﺑرو‬
‫ﻣﯾﺷوﯾد‪ .‬از ﻣﻧوی ‪ configure‬ﮔزﯾﻧﮫ‬
‫‪Configure ST Visual Programmer‬‬
‫را اﻧﺗﺧﺎب ﻧﻣﺎﯾﯾد‪.‬‬
‫در اﯾن ﻗﺳﻣت ﺑﺎ اﻧﺗﺧﺎب ﺳﺧت اﻓزار ﻣورد‬
‫اﺳﺗﻔﺎده و ﭘورت آن و ھﻣﭼﻧﯾن ﭘروﺗﮑل‬
‫ﭘروﮔرام ﮐردن و ﻣﯾﮑروﮐﻧﺗرﻟر ﻣورد ﻧظر‬
‫ﺑﮫ ﻗﺳﻣت ﺑﻌد ﺑروﯾد‪.‬‬
‫ﺑرای ﭘروﮔرام ﮐردن ﻣﯾﮑرو در اﺑﺗدا ﺑﺎﯾد ﻓﺎﯾل ‪hex‬‬
‫ﺧود را از ﻣﻧوی ‪ file-open‬اﻧﺗﺧﺎب و ﺑﮫ ﻧرم اﻓزار‬
‫ﻣﻌرﻓﯽ ﻧﻣﺎﯾﯾد‪.‬‬

‫ﺑﮭد از اﻧﺗﺧﺎب ﻓﺎﯾل ‪ hex‬ﺑﺎ ﮐﻠﯾﮏ ﺑر روی ﮔزﯾﻧﮫ‬


‫‪ Programm—current tab‬و ﯾﺎ از طرﯾق‬
‫ﮔزﯾﻧﮫ ﻣﺷﺧص ﺷده در ﺷﮑل ﻣﯾﺗواﻧﯾد ﻣﯾﮑروﮐﻧﺗرﻟر‬
‫ﺧود را ﭘروﮔرام ﮐﻧﯾد و در ﻗﺳﻣت ‪message‬‬
‫ﻣﯾﺗواﻧﯾد وﺿﻌﯾت اﺗﺻﺎل و ﭘروﮔرام ﺷدن ﻣﯾﮑرو‬
‫ﮐﻧﺗرﻟر را ﻣﺷﺎھده ﻧﻣﺎﯾﯾد‪.‬‬
‫ﺑﺎ اﻧﺗﺧﺎب ﮔزﯾﻧﮫ ‪option byte‬‬
‫ﻣﯾﺗواﻧﯾد ﺑﮫ ﻗﺳﻣت ﭘﯾﮑرﺑﻧدی ﻣرﺑوط‬
‫ﺑﮫ ﺳﺧت اﻓزار ﻣﯾﮑروﮐﻧﺗرﻟر دﺳت‬
‫ﭘﯾدا ﮐﻧﯾد‪.‬‬
‫ﻣﺳﺎﺋﻠﯽ از ﻗﺑﯾل ‪read protection‬‬
‫‪Watchdog timer, oscillator‬‬
‫ودﯾﮕر ﻣوارد را ﻣﯾﺗواﻧﯾد ﭘﯾﮑرﺑﻧدی‬
‫ﻧﻣﺎﯾﯾد‪.‬‬
I/O ‫راه اﻧدازی‬

‫ﺑرای ﮐﺎر ﺑﺎ ﭘﺎﯾﮫ ھﺎ ﺑﮫ ﺻورت ورودی وﯾﺎ ﺧروﺟﯽ‬


‫ رﺟﯾﺳﺗر وﺟود دارد ﮐﮫ ھر ﯾﮏ ﺑﮫ ﺻورت‬5 ، ‫دﯾﺟﯾﺗﺎل‬
‫ ﺑرای‬.‫ﺧﻼﺻﮫ و ﮐﺎرﺑردی ﺗوﺿﯾﺢ داده ﻣﯽ ﺷود‬
‫ ﻣراﺟﻌﮫ‬datasheet ‫ﺗوﺿﯾﺣﺎت ﺗﮑﻣﯾﻠﯽ ﻣﯾﺗواﻧﯾد ﺑﮫ‬
.‫ﮐﻧﯾد‬

GPIO registers
Port x data direction register (Px_DDR)
Port x control register 1 (Px_CR1)
Port x control register 2 (Px_CR2)
Port x output data register (Px_ODR)
Port x pin input register (Px_IDR)
‫‪Port x data direction register (Px_DDR) .1‬‬
‫ﺗوﺳط اﯾن رﺟﯾﺳﺗر ﻣﯾﺗواﻧﯾد ورودی ﯾﺎ ﺧروﺟﯽ ﺑودن ﭘﯾن ﻣورد ﻧظر را ﻣﺷﺧص ﮐﻧﯾد‪ .‬اﮔر درون اﯾن رﺟﯾﺳﺗر ﻣﻘدار ﯾﮏ ﻗرار ﮔﯾرد ﭘﯾن ﻣﺗﻧﺎظر ﺑﺎ ﺑﯾت رﺟﯾﺳﺗر ﺑﮫ‬
‫ﻋﻧوان ﺧروﺟﯽ و اﮔر ﻣﻘدار ﺻﻔر ﻗرار ﮔﯾرد ﺑﮫ ﺻورت ورودی ﭘﯾﮑرﺑﻧدی ﺧواھد ﺷد‪.‬‬
‫‪Port x control register 1 (Px_CR1) .2‬‬
‫اﮔر ﭘﯾن ﻣورد ﻧظر ﺑﮫ ﺻورت ورودی ﺗﻌرﯾف ﺷده ﺑﺎﺷد ﻣﯾﺗوان ﺗوﺳط اﯾن رﺟﯾﺳﺗر ﻣﻘﺎوﻣت ‪ pullup‬آن را ﻓﻌﺎل ﯾﺎ ﻏﯾر ﻓﻌﺎل ﮐرد و اﮔر ﺑﮫ ﺻورت ﺧروﺟﯽ ﺗﻌرﯾف‬
‫ﺷده ﺑﺎﺷد ﺗوﺳط اﯾن رﺟﯾﺳﺗر ﻣﯾﺗوان ﯾﮑﯽ از دو ﺣﺎﻟت ‪ open drain‬ﯾﺎ ‪ Push-pull‬ﺑرای ﺧروﺟﯽ اﻧﺗﺧﺎب ﮐرد‪ .‬ﮐﮫ ﻣﯾﺗواﻧﯾد ﺳﺎﺧﺗﺎر آن را در ‪blocK diagram‬‬
‫ﻗﺳﻣت ‪ GPIO‬ﺑﺑﯾﻧﯾد‪.‬‬
‫‪Port x control register 2 (Px_CR2) .3‬‬

‫ﻋﻣﻠﮑرد اﯾن رﺟﯾﺳﺗر ھم ﻣﺛل رﺟﯾﺳﺗر ‪ Px_CR1‬ﺗﺎﺑﻊ ورودی ﯾﺎ ﺧروﺟﯽ ﺑودن ﭘﯾن ﻣورد ﻧظر ﻣﯾﺑﺎﺷد ‪ .‬اﮔر اﯾن ﭘﯾن ﺑﮫ ﺻورت ورودی ﺑﺎﺷد ﻣﯾﺗواﻧﯾد ﺗوﺳط‬
‫اﯾن رﺟﯾﺳﺗر وﻗﻔﮫ ﺧﺎرﺟﯽ ان را ﻓﻌﺎل ﯾﺎ ﻏﯾر ﻓﻌﺎل ﮐرد و اﮔر ﺑﮫ ﺻورت ﺧروﺟﯽ ﺑﺎﺷد ﻣﯾﺗواﻧﯾد ‪ mode fast‬ﯾﺎ ﻣد ‪ slow‬را اﻧﺗﺧﺎب ﻧﻣﺎﯾﯾد‪.‬‬
‫‪Port x output data register (Px_ODR) .4‬‬

‫اﮔر ﭘﯾن را ﺑﮫ ﺻورت ﺧروﺟﯽ ﺗﻌرﯾف ﮐرده ﺑﺎﺷﯾد ﻣﯾﺗواﻧﯾد ﺗوﺳط اﯾن رﺟﯾﺳﺗر ﻣﻘدار ﺧروﺟﯽ را ﺗﺎﯾﯾن ﮐﻧﯾد‪.‬‬
‫‪Port x pin input register (Px_IDR) .5‬‬

‫اﮔر ﭘﯾن را ﺑﮫ ﺻورت وردی ﺗﻌرﯾف ﮐرده ﺑﺎﺷﯾد ﻣﯾﺗواﻧﯾد وﺿﻌﯾت وردی را از اﯾن رﺟﯾﺳﺗر ﺑﺧواﻧﯾد‪ .‬ھﻣﺎﻧطور ﮐﮫ در ﺷﮑل زﯾر ﻣﺷﺎھده ﻣﯾﻧﻣﺎﯾﯾد اﯾن رﺟﯾﺳﺗر ﻓﻘط‬
‫ﻗﺎﺑل ﺧواﻧدن ﻣﯽ ﺑﺎﺷد‪.‬‬
‫در زﯾر ﻣﯾﺗواﻧﯾد ﺧﻼﺻﮫ از وﺿﻌﯾت رﺟﯾﺳﺗرھﺎ را ﺑﮭﺗر ﻣﺷﺎھده ﻧﻣﺎﯾﯾد‪.‬‬
‫ﻣﺛﺎل ﺷﻣﺎره ﯾﮏ‪:‬‬

‫وﺿﻌﯾت ‪ PIN3‬از ‪ PORTD‬را ﺧروﺟﯽ ﻗرار داده و ھر ﯾﮏ ﺛﺎﻧﯾﮫ ﯾﮏ ﺑﺎر ﭼﺷﻣﮏ ﺑزﻧد‪ .‬ھﻣﭼﻧﯾن از ‪ mode fast‬اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪ .‬از اﺳﯾﻼﺗور داﺧﻠﯽ ‪16‬‬
‫‪ Mhz‬ﺑﮫ ﻋﻧوان ﻣﻧﺑﻊ ﮐﻼک ﻣﯾﮑروﮐﻧﺗرﻟر اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪.‬‬
#include <iostm8s003f3.h>

void delay_ms(unsigned long int n)


{
unsigned long int x=0;
unsigned long fCPU=2000000; // HSI RC =16 MHz ----- HSIDIV=8 ------CPUDIV=1 fCPU=16 / 8 / 1 Mhz

x=fCPU/1000;
x=x/50;
n=n*x;
while (n-- > 0);
}

//main entry point


int main( void )
{
CLK_ICKR=1; // High-speed internal RC on = 16 Mhz
CLK_CKDIVR = 24; //fHSI RC output/8 & fCPU=fMASTER/1

PD_ODR = 0; //Turn off all pins


PD_DDR_DDR3 = 1; //PortD, Bit 3 is output (PD3 - Data Direction Register)
PD_CR1_C13 = 1; //PortD, Control Register 1, Bit 3 (PD3) set to Push-Pull
PD_CR2_C23 = 1; //PortD, Control Register 2, Bit 3 (PD3) Output speed up to 10 MHz

while (1)
{

//Turn on and off the output and then delay


PD_ODR_bit.ODR3 = !PD_ODR_bit.ODR3;
delay_ms(1000);
}
}
‫در اﯾن ﻣﺛﺎل و ﻣﺛﺎل ھﺎی ﺑﻌد ﺗوﺿﯾﺢ ﺑرای ھر رﺟﯾﺳﺗر در ﺟﻠوی آن ﻧوﺷﺗﮫ ﺷده اﺳت ‪ .‬ھﻣﭼﻧﯾن از ﯾﮏ ﺗﺎﺑﻊ ﺑرای اﯾﺟﺎد ﺗﺎﺧﯾر اﺳﺗﻔﺎده ﺷده اﺳت ‪ .‬در ﺻورت‬
‫ﺗﻐﯾﯾر ﻓرﮐﺎﻧس ‪ ،‬ﻣﻘدار ﻓرﮐﺎﻧس ‪ cpu‬در اﯾن ﺗﺎﺑﻊ را ﺗﻐﯾﯾر دھﯾد‪ .‬ھﻣﭼﻧﯾن ﻣﯾﺗواﻧﯾد ﮐﺗﺎﺑﺧﺎﻧﮫ ھﺎ را از ادرس زﯾر ‪ download‬ﻧﻣﺎﯾﯾد‪.‬‬
‫‪http://s6.picofile.com/file/8267114792/lib.rar.html‬‬
‫‪or‬‬
‫‪http://www.4shared.com/rar/m3qojt0ece/lib.html‬‬

‫ﻣﺛﺎل ﺷﻣﺎره دو‪:‬‬


‫وﺿﻌﯾت ‪ PIN3‬از ‪ PORTD‬را ﺧروﺟﯽ و ‪ PIN2‬از ‪ PORTD‬را ورودی ﻗرار داده از ‪ mode fast‬ﺑرای ﺧروﺟﯽ و ‪ pull up‬را ﺑرای ﺣﺎﻟت ورودی‬
‫اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪ .‬از اﺳﯾﻼﺗور داﺧﻠﯽ ‪ 16 Mhz‬ﺑﮫ ﻋﻧوان ﻣﻧﺑﻊ ﮐﻼک ﻣﯾﮑروﮐﻧﺗرﻟر اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪ .‬ﺑﺎ ﻓﺷردن ﮐﻠﯾد وﺿﻌﯾت ﭘﯾن ﺧروﺟﯽ ﺗﻐﯾﯾر ﺣﺎﻟت دھد‪.‬‬
#include <iostm8s003f3.h>
#include "delay.h"

#define led PD_ODR_bit.ODR3


#define key PD_IDR_bit.IDR2

//main entry point


int main( void )
{
CLK_ICKR=1; // High-speed internal RC on = 16 Mhz
CLK_CKDIVR = 24; //fHSI RC output/8 & fCPU=fMASTER/1

PD_DDR_DDR3 = 1; //PortD, Bit 3 is output (PD3 - Data Direction Register)


PD_CR1_C13 = 1; //PortD, Control Register 1, Bit 3 (PD3) set to Push-Pull
PD_CR2_C23 = 1; //PortD, Control Register 2, Bit 3 (PD3) Output speed up to 10 MHz

PD_DDR_DDR2 = 0; //PortD, Bit 2 is INPUT (PD2 - Data Direction Register)


PD_CR1_C12 = 0; //PortD, Control Register 1, Bit 2 (PD2) Input with pull-up
PD_CR2_C22 = 0; //PortD, Control Register 2, Bit 2 (PD2) External interrupt disabled

while (1)
{

//Turn on and off the output and then key pressure


if(key==0){
led = !led;
while(key==0);
delay_ms(100);
}

}
}
‫ﺣﺎل ﮐﮫ ﺑﺎ ﭘﺎﯾﮫ ھﺎی ﻣﯾﮑروﮐﻧﺗرﻟر اﺷﻧﺎ ﺷدﯾد ﺑﮫ ﺳراغ راه اﻧدازی ‪ lcd‬ﮐﺎرﮐﺗری ‪ 2*16‬ﻣﯾروﯾم ‪ .‬ﺑرای راه اﻧدازی ‪ lcd‬ﻻزم اﺳت ﺗﺎ ﻧﮑﺎﺗﯽ ﯾﺎداوری ﺷود ‪ .‬ﺷﻣﺎ‬
‫در اﺑﺗدا ﺑﺎﯾد ﮐﺗﺎﺑﺧﺎﻧﮫ ‪ lcd‬را در ﺑرﻧﺎﻣﮫ ﻣﻌرﻓﯽ و ﭘﺎﯾﮫ ھﺎی ‪ lcd‬را ﺑﮫ ﻣﯾﮑروﮐﻧﺗرﻟر ﻣﻌرﻓﯽ ﻧﻣﺎﯾﯾد‪ .‬ﺑﺎ ﺑﺎز ﮐردن ﻓﺎﯾل ‪ lcd.h‬در اﺑﺗدای ان ﭘﺎﯾﮫ ھﺎی ‪ lcd‬را ﻣﻌرﻓﯽ‬
‫ﻧﻣﺎﯾﯾد‪ .‬اﯾن ﮐﺗﺎﺑﺧﺎﻧﮫ ﺑرای راه اﻧدازی از ‪ 4 mode‬ﺑﯾﺗﯽ ﺑرای راه اﻧدازی ‪ lcd‬اﺳﺗﻔﺎده ﻣﯾﮑﻧد‪ .‬ﺣﺗﻣﺎ ﺑﮫ اﯾن ﻣوﺿوع ﺗوﺟﮫ داﺷﺗﮫ ﺑﺎﺷﯾد ﮐﮫ ﻓﺎﯾل ھﺎی ﻣرﺑوط ﺑﮫ ‪lcd‬‬
‫را ﺑﮫ ﭘروژه ﺧود اﺿﺎف ﻧﻣﺎﯾﯾد‪.‬‬

‫‪#define LCD_Enable PD_ODR_ODR4‬‬


‫‪#define LCD_RS‬‬ ‫‪PD_ODR_ODR5‬‬
‫‪#define LCDPort‬‬ ‫‪PC_ODR‬‬

‫در ﻣﯾﮑروﮐﻧﺗرﻟر ‪ STM8S003F3‬ﭘورت ھﺎی آن ﮐﺎﻣل ﻧﺑوده و ﻣﺟﺑور ھﺳﺗﯾم از دو ﭘورت ﺑرای راه اﻧدازی اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾم‪ .‬ھﻣﭼﻧﯾن ﭘورﺗﯽ ﮐﮫ ﺑرای ﭘﺎﯾﮫ ھﺎی‬
‫‪ data‬اﺳﺗﻔﺎده ﻣﯾﺷود ﺑﺎﯾد ﺑﮫ ﺑﯾت ھﺎی ﭘر ارزش ﭘورت ﻣﺗﺻل ﺷود‪ .‬ﺗﺎﺑﻊ ‪ lcd_command‬در ﻓﺎﯾل ‪ lcd.c‬ﺑﮫ ﺻورت ﭘﯾش ﻓرض از ﭘﺎﯾﮫ ھﺎی ﭘر ارزش ﺑﯾت‬
‫ﺑرای ‪ data‬اﺳﺗﻔﺎده ﻣﯾﮑﻧد ‪ ) .‬ﭘﺎﯾﮫ ھﺎی ‪ 7-4‬ھر ﭘورت (‬
‫)‪void lcd_command(unsigned char cmd‬‬
‫{‬
‫;‪LCD_RS = 0‬‬
‫;)‪LCDPort= 16*((cmd >> 4) & 0x0F‬‬
‫;)(‪lcd_enable‬‬
‫;)‪LCDPort = 16*(cmd & 0x0F‬‬
‫;)(‪lcd_enable‬‬
‫;)‪Delay(2‬‬
‫}‬

‫در ﺻورﺗﯽ ﮐﮫ ﻣﺎﯾل ھﺳﺗﯾد ار ﭘﯾن ھﺎی ‪ 3-0‬ﭘورت اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد از ﮐد ھﺎی زﯾر ﺑرای ﺗﺎﺑﻊ ‪ lcd_command‬در ﻓﺎﯾل ‪ lcd.c‬اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪.‬‬
‫)‪void lcd_command(unsigned char cmd‬‬
‫{‬
‫;‪LCD_RS = 0‬‬
‫;)‪LCDPort= 16*((cmd >> 4) & 0x0F‬‬
‫;)(‪lcd_enable‬‬
‫;)‪LCDPort = 16*(cmd & 0x0F‬‬
‫;)(‪lcd_enable‬‬
‫;)‪Delay(2‬‬
‫}‬
‫ﻣﺛﺎل ﺷﻣﺎره ﺳﮫ ‪:‬‬
‫ﭘﺎی ھﺎی ﻣﯾﮑروﮐﻧﺗرﻟر را ﻣطﺎﺑق ﺷﮑل زﯾر ﺑرای راه اﻧدازی ‪ lcd‬ﻣﻌرﻓﯽ ﻧﻣﺎﯾﯾد و ﺑرای ﺗﺳت ‪ lcd‬ﻣﺗﻧﯽ دﻟﺧواه روی آن ﻧﻣﺎﯾش دھﯾد‪.‬‬
#include <iostm8s003k3.h>
#include <intrinsics.h>
#include "lcd.h"
#include "delay.h"

void InitMCU(void)
{
CLK_CKDIVR = 0x00;

PC_DDR = 0xF0;
PC_CR1 = 0xF0;
PC_ODR = 0x00;

PD_DDR_DDR4 = 1;
PD_CR1_C14 = 1;
PD_ODR_ODR4 = 0;

PD_DDR_DDR5 = 1;
PD_CR1_C15 = 1;
PD_ODR_ODR5 = 0;

}
void main(void)
{

InitMCU();

lcd_init();
lcd_string(1,1,"be name KHODA ");
lcd_string(2,3,"TEST ");
for(;;);
}
‫‪Watchdog timer‬‬
‫‪WDT‬ﺑﮫ ﺗﺎﯾﻣری ﺧﺎص اﺷﺎره دارد ﮐﮫ وظﯾﻔﮫ آن ﻧﮕﮭداری و ﻧظﺎرت ﺑر ﮐﺎر ﻣﯾﮑروﮐﻧﺗرﻟر اﺳت‪ .‬اﯾن ﺗﺎﯾﻣر ﻣﺟﮭز ﺑﮫ اﺳﯾﻼﺗور ‪ RC‬داﺧﻠﯽ ﺑرای ﺧود اﺳت ﮐﮫ‬
‫ﭘس از ﺷﻣﺎرش و ﺳررﯾز ﺷدن‪ ،‬اﯾن ﻗﺎﺑﻠﯾت را دارد ﮐﮫ ﻣﯾﮑروﮐﻧﺗرﻟر را ﺑﺻورت داﺧﻠﯽ رﯾﺳت ﮐﻧد‪ .‬اﯾن ﺗﺎﯾﻣر در ﻣواردی ﮐﺎرﺑرد دارد ﮐﮫ اﻣﮑﺎن ﻗﻔل ﮐردن ﺗراﺷﮫ‬
‫وﺟود دارد و ﺑﮫ اﯾن وﺳﯾﻠﮫ ﭘس از ﻗﻔل ﮐردن ﻣﯾﮑروﮐﻧﺗرﻟر‪ ،‬دﯾﮕر اﻣﮑﺎن رﯾﺳت ﮐردن ‪ WDT‬وﺟود ﻧدارد و ﺑﮫ ھﻣﯾن دﻟﯾل ‪ WDT‬ﺷﻣﺎرش ﺧود را اﻧﺟﺎم داده و‬
‫ﺳررﯾز ﻣﯽ ﺷود و در ﻧﺗﯾﺟﮫ ﻣﯾﮑروﮐﻧﺗرﻟر را رﯾﺳت ﻣﯽ ﮐﻧد ﺗﺎ از ﺣﺎﻟت ﻗﻔل ﺧﺎرج ﺷود‪ .‬ﺑرﻧﺎﻣﮫ ﻣﯾﮑروﮐﻧﺗرﻟر ﺑﺎﯾد ﺑﮕوﻧﮫ ای ﺑﺎﺷد ﮐﮫ در ﺣﯾن اﺟرا‪ ،‬ﺗﺎﯾﻣر ﺳﮓ‬
‫ﻧﮕﮭﺑﺎن )‪ (Watch Dog Timer‬ﺑﺻورت ﻣداوم ﻗﺑل از ﺳررﯾز ﺷدن‪ ،‬ﺻﻔر ﺷود‪.‬‬
‫در زﯾر ﻣﯾﺗواﻧﯾد رﺟﯾﺳﺗر ﻣرﺑوط ﺑﮫ ‪ watchdog timer‬را ﻣﺷﺎھده ﻧﻣﺎﯾد ‪ .‬ﺑﺎ ﯾﮏ ﺷدن ﺑﯾت ﺷﻣﺎره ‪ 7‬اﯾن رﺟﯾﺳﺗر ﺗﺎﯾﻣر ﻓﻌﺎل ﺷده و ﺗوﺳط ﻣﺎﺑﻘﯽ ﺑﯾت ھﺎ ﻣﻘدار‬
‫ﺗﺎﯾﻣر ﻣﺷﺧص ﻣﯾﺷود ‪ .‬در ﺻورت ﺳررﯾز اﯾن ﺗﺎﯾﻣر ﻣﯾﮑرو ﮐﻧﺗرﻟر ‪ reset‬ﻣﯽ ﺷود‪ .‬ﺑرای ھﻣﯾن اﻣر ﺷﻣﺎ ﺑﻌد از ﻓﻌﺎل ﮐردن اﯾن ﺗﺎﯾﻣر ﺑﺎﯾد در ﺑرﻧﺎﻣﮫ ﺧود‬
‫ﻣﻘدار اﯾن ﺗﺎﯾﻣر را ﺻﻔر ﻧﻣﺎﯾﯾد‪.‬‬
‫ﻣﺛﺎل ﺷﻣﺎره ﭼﮭﺎر ‪:‬‬
‫‪ wachdog timer‬ﻣﯾﮑرو ﮐﻧﺗرﻟر را ﻓﻌﺎل و در ﺑرﻧﺎﻣﮫ اﺻﻠﯽ ﻣﻘدار آن را ﺻﻔر ﮐرده ﺗﺎ ﻣﺎﻧﻊ از ‪ reset‬ﺷدن ﻣﯾﮑروﮐﻧﺗرﻟر ﺷود‪ .‬در ﺑرﻧﺎﻣﮫ اﺻﻠﯽ ‪led‬‬
‫ﻣرﺑوط ﺑﮫ ﺷﮑل زﯾر ﺑﮫ ﺻورت ﭼﺷﻣﮏ زن ﺑﺎﺷد‪.‬‬
#include <iostm8s003f3.h>
#include "delay.h"

#define led PD_ODR_bit.ODR3


#define key PD_IDR_bit.IDR2

unsigned char i;

//main entry point


int main( void )
{
CLK_ICKR=1; // High-speed internal RC on = 16 Mhz
CLK_CKDIVR = 24; //fHSI RC output/8 & fCPU=fMASTER/1

PD_DDR_DDR3 = 1; //PortD, Bit 3 is output (PD3 - Data Direction Register)


PD_CR1_C13 = 1; //PortD, Control Register 1, Bit 3 (PD3) set to Push-Pull
PD_CR2_C23 = 1; //PortD, Control Register 2, Bit 3 (PD3) Output speed up to 10 MHz

for(i=0;i<10;i++){
PD_ODR_bit.ODR3 = !PD_ODR_bit.ODR3;
delay_ms(500);
}

WWDG_CR=255; // Watchdog enabled

while (1)
{
WWDG_CR=255; //reset value of Watchdog

//Turn on and off the output and then delay


PD_ODR_bit.ODR3 = !PD_ODR_bit.ODR3;
delay_ms(1000);
}

}
}
‫راه اﻧدازی وﻗﻔﮫ‬
‫در ﻓرھﻧﮓ راﯾﺎﻧﮫ‪ ،‬وﻗﻔﮫ ﯾﺎ ‪ Interrupt‬ﯾﮏ ﺳﯾﮕﻧﺎل ﺑﮫ رﯾزﭘردازﻧده اﺳت ﮐﮫ ﺑﮫ ﺗوﺟﮫ و ﭘﺎﺳﺦ ﺳرﯾﻊ ‪ CPU‬ﻧﯾﺎز دارد‪ .‬ھﻧﮕﺎﻣﯽ ﮐﮫ ﯾﮏ وﻗﻔﮫ رخ ﻣﯽدھد‪ ،‬ﭘردازﻧده‬
‫ﻋﻣﻠﯾﺎت ﺟﺎری ﺧود را ﻣﺗوﻗف ﻣﯽﮐﻧد ﺗﺎ ﺑﮫ درﺧواﺳت وﻗﻔﮫ رﺳﯾدﮔﯽ ﮐﻧد ‪ .‬در ھر ﻣﯾﮑروﮐﻧﺗرﻟر ﺗﻌدادی وﻗﻔﮫ وﺟود دارد ﮐﮫ ﮐﺎرﺑر ﺑﺳﺗﮫ ﺑﮫ ﻧوع ﻧﯾﺎز ﺧود از آﻧﮭﺎ‬
‫ﻣﯾﺗواﻧد اﺳﺗﻔﺎده ﮐﻧد‪ .‬ھر وﻗﻔﮫ دارای ادرس ﻣﻧﺣﺻر ﺑﮫ ﻓردی اﺳت ﮐﮫ ﺑﺎ اﺗﻔﺎق اﻓﺗﺎدن آن ‪ cpu‬ﺑرﻧﺎﻣﮫ اﺻﻠﯽ ﺧود را رھﺎ ﮐرده و ﺑﮫ ان آدرس ﻣﯾرود و ﺑرﻧﺎﻣﮫ وﻗﻔﮫ‬
‫ﻣورد ﻧظر را اﺟرا ﮐرده و ﺳﭘس ﺑﮫ ﺑرﻧﺎﻣﮫ اﺻﻠﯽ ﺑر ﻣﯾﮕردد‪.‬‬
‫ﺑﺎ ﺑﺎزﮐردن ﻓﺎﯾل ‪ iostm8s003F3.h‬ﻣﯾﺗواﻧﯾد در ﻗﺳﻣت آﺧر اﯾن ﻓﺎﯾل و در ﻗﺳﻣت ‪ Interrupt vector numbers‬ادرس ﻣرﺑوط ﺑﮫ ھر وﻗﻔﮫ را ﻣﺷﺎھده و از‬
‫ان اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪ .‬ھﻣﭼﻧﯾن ﺑرای ﻓﻌﺎل ﮐردن وﻗﻔﮫ ﺳراﺳری ﻣﯾﺗواﻧﯾد از ﻓﺎﯾل ‪ intrinsics.h‬و دﺳﺗورات آن اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد‪.‬‬

‫ﻣﺛﺎل ﺷﻣﺎره ﭘﻧﺞ ‪:‬‬


‫‪ External interrupt‬ﻣرﺑوط ﺑﮫ ‪ PIN2‬از ‪ PORTD‬ﺑﮫ ﺻورت ﻓﻌﺎل ﺑﺎ ﻟﺑﮫ ﭘﺎﯾﯾن روﻧده ﻓﻌﺎل ﮐرده و ﺑﺎ ھر ﺑﺎر ﻓﺷردن ﮐﻠﯾد ﻣﺗﺻل ﺑﮫ ان در ﺑرﻧﺎﻣﮫ وﻗﻔﮫ‬
‫‪ LED‬ﻣﺗﺻل ﺑﮫ ﻣﺑﮑرو را ﺗﻐﯾﯾر وﺿﻌﯾت دھﯾد‪.‬‬
#include <iostm8s003F3.h>
#include <intrinsics.h>
#include "delay.h"

#pragma vector = 8
__interrupt void EXTI_PORTD_2(void)
{
PD_ODR_ODR3 = !PD_ODR_ODR3; // Toggle Port D, pin 3.
}

void main()
{
CLK_ICKR=1; // High-speed internal RC on = 16 Mhz
CLK_CKDIVR = 24; //fHSI RC output/8 & fCPU=fMASTER/1

__disable_interrupt();
PD_ODR = 0; // All pins are turned off.
PD_DDR = 0xff; // All pins are outputs.
PD_CR1 = 0xff; // Push-Pull outputs.
PD_CR2 = 0xff; // Output speeds up to 10 MHz.

PD_DDR_DDR2 = 0; // PD4 is input.


PD_CR1_C12 = 1; // PD4 is floating input.

// Set up the interrupt.


//
EXTI_CR1_PDIS = 2; // Interrupt on falling edge.
EXTI_CR2_TLIS = 0; // Falling edge only.
__enable_interrupt();

while (1)
{
__wait_for_interrupt();
}
}
‫ﺗﺎﯾﻣر‬
‫ﻣﯾﮑروﮐﻧﺗرﻟر ‪ STM8S‬دارای ﺗﺎﯾﻣرھﺎی ‪8‬و‪ 16‬ﺑﯾﺗﯽ ﻣﯾﺑﺎﺷد ﮐﮫ راه اﻧدازی اﻧﮭﺎ ﺗﻔﺎده زﯾﺎدی ﺑﺎ ﯾﮑدﯾﮕر ﻧداﺷﺗﮫ ‪ ،‬ﺑﻌﺿﯽ از اﯾن ﺗﺎﯾﻣرھﺎ دارای ﻧﻘش ھﺎی دﯾﮕری ﺑﮫ‬
‫ﺟز ﺗﺎﯾﻣر ﻣﯾﺑﺎﺷﻧد ‪ .‬در اﯾن آﻣوزش ﺳﻌﯽ ﺷده اﺳت از ﻣﺳﺎﺋل اوﻟﯾﮫ ﺧودداری ﺷده و ﺑﺎ اراﺋﮫ ﻣﺛﺎل از آن اﺳﺗﻔﺎده ﺷود‪ .‬ﺑرای درک ﺑﮭﺗر از ﻋﻣﻠﮑرد ﺗﺎﯾﻣرھﺎ ﻣﯾﺗواﻧﯾد‬
‫ﺑﮫ ‪ datasheet‬ﻣراﺟﻌﮫ ﻧﻣﺎﯾﯾد‪.‬‬
‫ﻣﺛﺎل ﺷﻣﺎره ﺷش ‪:‬‬
‫ﺑﮫ وﺳﯾﻠﮫ ﺗﺎﯾﻣر‪ 8‬ﺑﯾﺗﯽ ﺷﻣﺎره ﭼﮭﺎر و وﻗﻔﮫ ﺗﺎﯾﻣر ﯾﮏ زﻣﺎن ﯾﮏ ﺛﺎﻧﯾﮫ اﯾﺟﺎد ﮐرده و ﯾﮏ ﭼﺷﻣﮏ زن ﺑرای ‪ led‬ﻣﺗﺻل ﺑﮫ ﻣﯾﮑروﮐﻧﺗرﻟر ﺑﺳﺎزﯾد‪ .‬آدرس وﻗﻔﮫ ﺗﺎﯾﻣر‬
‫ﺷﻣﺎره ﭼﮭﺎر را ﻣﯾﺗواﻧﯾد از ﮐﺗﺎﺑﺧﺎﻧﮫ ﺗوﺿﯾﺢ داده ﺷده اﺳﺗﺧراج ﻧﻣﺎﯾﯾد ‪ .‬ﺗوﺿﯾﺣﺎت ﻣرﺑوط ﺑﮫ ھر رﺟﯾﺳﺗر در ﺟﻠوی آن داده ﺷده اﺳت‪.‬‬

‫>‪#include <iostm8s003f3.h‬‬
‫>‪#include <intrinsics.h‬‬
‫"‪#include "delay.h‬‬

‫;‪unsigned int count=0‬‬

‫‪// toggle pin every 1 seconde‬‬


‫‪#pragma vector = 0x19‬‬
‫{)‪__interrupt void timer4_interrupt(void‬‬
‫;‪count++‬‬
‫{)‪if(count>60‬‬
‫;‪PD_ODR_bit.ODR3=!PD_ODR_bit.ODR3‬‬
‫;‪count=0‬‬
‫}‬

‫‪TIM4_SR_bit.UIF=0; // timer4 interrupt flage=0‬‬


‫}‬
//main entry point
int main( void )
{
CLK_ICKR=1; // High-speed internal RC on = 16 Mhz
CLK_CKDIVR = 24; //fHSI RC output/8 & fCPU=fMASTER/1

PD_ODR = 0; //Turn off all pins


PD_DDR_DDR3 = 1; //PortD, Bit 3 is output (PD3 - Data Direction Register)
PD_CR1_C13 = 1; //PortD, Control Register 1, Bit 3 (PD3) set to Push-Pull
PD_CR2_C23 = 1; //PortD, Control Register 2, Bit 3 (PD3) Output speed up to 10 MHz

TIM4_IER_bit.UIE=1; // timer4 interrupt enable


TIM4_SR=0; // timer4 interrupt flage=0
TIM4_CNTR=0; // timer4_value=0
TIM4_PSCR=7; // prescaler=128
TIM4_CR1=1; // timer4 enable

__enable_interrupt();

while (1)
{

__wait_for_interrupt();
}
}
‫راه اﻧدازی )‪Analog/digital converter (ADC‬‬
‫ﻣﯾﮑروﮐﻧﺗرﻟر ‪ STM8S‬از ﯾﮏ ‪ ADC 10bit‬ﺑﮭره ﻣﯽ ﺑرد‪ .‬در زﯾر ﻣﯾﺗواﻧﯾد ﻣﺷﺧﺻﺎت ﮐﻠﯽ اﯾن ﻣﺎژول را ﻣﺷﺎھده ﻧﻣﺎﯾﯾد‪.‬‬

‫ھﻣﺎﻧطور ﮐﮫ در ﺷﮑل زﯾر ﻣﺷﺎھده ﻣﯽ ﻧﻣﺎﯾﯾد ﭘﺎﯾﮫ ای آﻧﺎﻟوگ ﺑﺎ اﺳم ‪ AINx‬ﻣﺷﺧص ﺷده اﻧد‪.‬‬
‫‪ ADC‬اﯾن ﻣﯾﮑروﮐﻧﺗرﻟر دارای ﭼﻧدﯾن رﺟﯾﺳﺗر ﻣﯾﺑﺎﺷد ﮐﮫ ﺗوﺿﯾﺢ ﺗﮏ ﺗﮏ اﻧﮭﺎ از ﺣوﺻﻠﮫ اﯾن ﺑﺣث ﺧﺎرج ﺑوده و ﻣﯾﺗواﻧﯾد ﺗوﺿﯾﺣﺎت آن را از ‪datasheet‬‬
‫ﻣﯾﮑروﮐﻧﺗرﻟر ﺑﺧواﻧﯾد ‪ .‬در زﯾر ﺑﺎ اراﺋﮫ ﯾﮏ ﻣﺛﺎل و ﺑﺎ اﺳﺗﻔﺎده از رﺟﯾﺳﺗرھﺎی ﻣﮭم ان ﻣﺛﺎﻟﯽ ﻧوﺷﺗﮫ ﺷده اﺳت ﮐﮫ ﻣﯾﺗواﻧﯾد از ان ﺑﮭره ﺑﺑرﯾد‪.‬‬

‫ﺗﻣرﯾن ﺷﻣﺎره ھﻔت ‪:‬‬


‫ﻣطﺎﺑق ﺷﮑل زﯾر ﺑﺎ اﺗﺻﺎل ﯾﮏ ﭘﺗﺎﻧﺳﯾوﻣﺗر ﺑﮫ ورودی ‪ AIN6‬ﻣﻘدار وﻟﺗﺎژ ورودی را ﺑﮫ ﯾﮏ ﻋدد دﯾﺟﯾﺗﺎل ﺗﺑدﯾل ﮐرده و ﺑر روی ‪ LCD‬ﻧﻣﺎﯾش دھﯾد‪.‬‬
#include <iostm8s003F3.h>
#include <stdio.h>
#include "delay.h"
#include "lcd.h"

char a[4];
signed int l,h,value;

void InitMCU(void)
{
CLK_CKDIVR = 1;

PC_DDR = 0xFF;
PC_CR1 = 0xFF;
PC_ODR = 0x00;

PD_DDR_DDR4 = 1;
PD_CR1_C14 = 1;
PD_ODR_ODR4 = 0;

PD_DDR_DDR5 = 1;
PD_CR1_C15 = 1;
PD_ODR_ODR5 = 0;
}

void main(void)
{
PB_DDR_DDR0 = 0; //PortB, Bit 0 is input

InitMCU();
lcd_init();

while(1)
{
ADC_CSR=0x06; // ADC on AIN6
ADC_CR2=0X38; // right Right alignment
ADC_CR1=0x01; // Turn ADC on & triger
//while(ADC_CSR_EOC==0);

l=ADC_DRL;
h=ADC_DRH;
value=h*256;
value=value+l;

lcd_string(1,1,"ADC6= ");
sprintf(a,"%d ",value);
lcd_string(1,6,a);
delay_ms(100);
}
}
‫در اﯾن آﻣوزش ﺳﻌﯽ ﺷد ‪ ،‬ﻣﺳﺎﺋل ﻣﮭم و ﮐﺎرﺑردی ﺑرای راه اﻧدازی ﻣﯾﮑروﮐﻧﺗرﻟر ‪ STM8S‬اراﺋﮫ ﺷود و از ﺑﯾﺎن ﺟزﺋﯾﺎت ﺧودداری ﺷده اﺳت ‪ .‬ھﻣﭼﻧﯾن ﺷﻣﺎ ﻣﯾﺗواﻧﯾد‬
‫از ﮐﺗﺎﺑﺧﺎﻧﮫ ھﺎی اراﺋﮫ ﺷده ﺗوﺳط ﮐﺎﻣﭘﺎﯾﻠر اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد ‪ ،‬اﻣﺎ در اﯾن اﻣوزش ﺑرای درک ﺑﮭﺗر از اﯾن ﻣﯾﮑروﮐﻧﺗرﻟر از رﺟﯾﺳﺗرھﺎ ﺑرای اﻣوزش اﺳﺗﻔﺎده ﺷد‪.‬اﻣﯾد اﺳت‬
‫ﺑﺎ ﺧواﻧدن اﯾن ﻣطﺎﻟب ﺗواﻧﺳﺗﮫ ﺑﺎﺷم ﺧدﻣﺗﯽ ﺑﺳﯾﺎر ﮐوﭼﮏ در زﻣﯾﻧﮫ ﻋﻠم اﻟﮑﺗروﻧﯾﮏ ﺑﮫ ﻋﻼﻗﮫ ﻣﻧدان اﯾن ﻋﻠم زﯾﺑﺎ ﮐرده ﺑﺎﺷم ‪.‬‬

‫در ﺻورت وﺟود ﻣﺷﮑل و ھرﮔوﻧﮫ ﭘﯾﺷﻧﮭﺎدی در ارﺋﮫ ﺑﮭﺗر ﻣطﺎﻟب و ﻣطﺎﻟﺑﯽ ﺑرای ﮐﺎﻣل ﮐردن اﯾن آﻣوزش ﻣﯾﺗواﻧﯾد ﻧظرات ﺧود را ﺑﮫ ادرس زﯾر ارﺳﺎل ﻧﻣﺎﯾﯾد‪.‬‬
‫‪[email protected]‬‬

‫ﺑﺎ ﺗﺷﮑر‬
‫ﻋﻠﯽ ﻣﺣﻣد ﺷﻔﯾﻌﯽ‬

You might also like