Professional Documents
Culture Documents
ir
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ﻧﻣﺎﯾﯾد.
#include <iostm8s003f3.h>
x=fCPU/1000;
x=x/50;
n=n*x;
while (n-- > 0);
}
while (1)
{
ﺗﻐذﯾﯾﮫ ﻣﯾﮑروﮐﻧﺗرﻟر
ﭘﺎﯾﮫ رﯾﺳت
Clock
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اﻧﺗﺧﺎب و ﺑﮫ ﻧرم اﻓزار
ﻣﻌرﻓﯽ ﻧﻣﺎﯾﯾد.
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>
x=fCPU/1000;
x=x/50;
n=n*x;
while (n-- > 0);
}
while (1)
{
while (1)
{
}
}
ﺣﺎل ﮐﮫ ﺑﺎ ﭘﺎﯾﮫ ھﺎی ﻣﯾﮑروﮐﻧﺗرﻟر اﺷﻧﺎ ﺷدﯾد ﺑﮫ ﺳراغ راه اﻧدازی lcdﮐﺎرﮐﺗری 2*16ﻣﯾروﯾم .ﺑرای راه اﻧدازی lcdﻻزم اﺳت ﺗﺎ ﻧﮑﺎﺗﯽ ﯾﺎداوری ﺷود .ﺷﻣﺎ
در اﺑﺗدا ﺑﺎﯾد ﮐﺗﺎﺑﺧﺎﻧﮫ lcdرا در ﺑرﻧﺎﻣﮫ ﻣﻌرﻓﯽ و ﭘﺎﯾﮫ ھﺎی lcdرا ﺑﮫ ﻣﯾﮑروﮐﻧﺗرﻟر ﻣﻌرﻓﯽ ﻧﻣﺎﯾﯾد .ﺑﺎ ﺑﺎز ﮐردن ﻓﺎﯾل lcd.hدر اﺑﺗدای ان ﭘﺎﯾﮫ ھﺎی lcdرا ﻣﻌرﻓﯽ
ﻧﻣﺎﯾﯾد .اﯾن ﮐﺗﺎﺑﺧﺎﻧﮫ ﺑرای راه اﻧدازی از 4 modeﺑﯾﺗﯽ ﺑرای راه اﻧدازی lcdاﺳﺗﻔﺎده ﻣﯾﮑﻧد .ﺣﺗﻣﺎ ﺑﮫ اﯾن ﻣوﺿوع ﺗوﺟﮫ داﺷﺗﮫ ﺑﺎﺷﯾد ﮐﮫ ﻓﺎﯾل ھﺎی ﻣرﺑوط ﺑﮫ lcd
را ﺑﮫ ﭘروژه ﺧود اﺿﺎف ﻧﻣﺎﯾﯾد.
در ﻣﯾﮑروﮐﻧﺗرﻟر 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"
unsigned char i;
for(i=0;i<10;i++){
PD_ODR_bit.ODR3 = !PD_ODR_bit.ODR3;
delay_ms(500);
}
while (1)
{
WWDG_CR=255; //reset value of Watchdog
}
}
راه اﻧدازی وﻗﻔﮫ
در ﻓرھﻧﮓ راﯾﺎﻧﮫ ،وﻗﻔﮫ ﯾﺎ Interruptﯾﮏ ﺳﯾﮕﻧﺎل ﺑﮫ رﯾزﭘردازﻧده اﺳت ﮐﮫ ﺑﮫ ﺗوﺟﮫ و ﭘﺎﺳﺦ ﺳرﯾﻊ CPUﻧﯾﺎز دارد .ھﻧﮕﺎﻣﯽ ﮐﮫ ﯾﮏ وﻗﻔﮫ رخ ﻣﯽدھد ،ﭘردازﻧده
ﻋﻣﻠﯾﺎت ﺟﺎری ﺧود را ﻣﺗوﻗف ﻣﯽﮐﻧد ﺗﺎ ﺑﮫ درﺧواﺳت وﻗﻔﮫ رﺳﯾدﮔﯽ ﮐﻧد .در ھر ﻣﯾﮑروﮐﻧﺗرﻟر ﺗﻌدادی وﻗﻔﮫ وﺟود دارد ﮐﮫ ﮐﺎرﺑر ﺑﺳﺗﮫ ﺑﮫ ﻧوع ﻧﯾﺎز ﺧود از آﻧﮭﺎ
ﻣﯾﺗواﻧد اﺳﺗﻔﺎده ﮐﻧد .ھر وﻗﻔﮫ دارای ادرس ﻣﻧﺣﺻر ﺑﮫ ﻓردی اﺳت ﮐﮫ ﺑﺎ اﺗﻔﺎق اﻓﺗﺎدن آن cpuﺑرﻧﺎﻣﮫ اﺻﻠﯽ ﺧود را رھﺎ ﮐرده و ﺑﮫ ان آدرس ﻣﯾرود و ﺑرﻧﺎﻣﮫ وﻗﻔﮫ
ﻣورد ﻧظر را اﺟرا ﮐرده و ﺳﭘس ﺑﮫ ﺑرﻧﺎﻣﮫ اﺻﻠﯽ ﺑر ﻣﯾﮕردد.
ﺑﺎ ﺑﺎزﮐردن ﻓﺎﯾل iostm8s003F3.hﻣﯾﺗواﻧﯾد در ﻗﺳﻣت آﺧر اﯾن ﻓﺎﯾل و در ﻗﺳﻣت Interrupt vector numbersادرس ﻣرﺑوط ﺑﮫ ھر وﻗﻔﮫ را ﻣﺷﺎھده و از
ان اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد .ھﻣﭼﻧﯾن ﺑرای ﻓﻌﺎل ﮐردن وﻗﻔﮫ ﺳراﺳری ﻣﯾﺗواﻧﯾد از ﻓﺎﯾل intrinsics.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.
while (1)
{
__wait_for_interrupt();
}
}
ﺗﺎﯾﻣر
ﻣﯾﮑروﮐﻧﺗرﻟر STM8Sدارای ﺗﺎﯾﻣرھﺎی 8و 16ﺑﯾﺗﯽ ﻣﯾﺑﺎﺷد ﮐﮫ راه اﻧدازی اﻧﮭﺎ ﺗﻔﺎده زﯾﺎدی ﺑﺎ ﯾﮑدﯾﮕر ﻧداﺷﺗﮫ ،ﺑﻌﺿﯽ از اﯾن ﺗﺎﯾﻣرھﺎ دارای ﻧﻘش ھﺎی دﯾﮕری ﺑﮫ
ﺟز ﺗﺎﯾﻣر ﻣﯾﺑﺎﺷﻧد .در اﯾن آﻣوزش ﺳﻌﯽ ﺷده اﺳت از ﻣﺳﺎﺋل اوﻟﯾﮫ ﺧودداری ﺷده و ﺑﺎ اراﺋﮫ ﻣﺛﺎل از آن اﺳﺗﻔﺎده ﺷود .ﺑرای درک ﺑﮭﺗر از ﻋﻣﻠﮑرد ﺗﺎﯾﻣرھﺎ ﻣﯾﺗواﻧﯾد
ﺑﮫ datasheetﻣراﺟﻌﮫ ﻧﻣﺎﯾﯾد.
ﻣﺛﺎل ﺷﻣﺎره ﺷش :
ﺑﮫ وﺳﯾﻠﮫ ﺗﺎﯾﻣر 8ﺑﯾﺗﯽ ﺷﻣﺎره ﭼﮭﺎر و وﻗﻔﮫ ﺗﺎﯾﻣر ﯾﮏ زﻣﺎن ﯾﮏ ﺛﺎﻧﯾﮫ اﯾﺟﺎد ﮐرده و ﯾﮏ ﭼﺷﻣﮏ زن ﺑرای ledﻣﺗﺻل ﺑﮫ ﻣﯾﮑروﮐﻧﺗرﻟر ﺑﺳﺎزﯾد .آدرس وﻗﻔﮫ ﺗﺎﯾﻣر
ﺷﻣﺎره ﭼﮭﺎر را ﻣﯾﺗواﻧﯾد از ﮐﺗﺎﺑﺧﺎﻧﮫ ﺗوﺿﯾﺢ داده ﺷده اﺳﺗﺧراج ﻧﻣﺎﯾﯾد .ﺗوﺿﯾﺣﺎت ﻣرﺑوط ﺑﮫ ھر رﺟﯾﺳﺗر در ﺟﻠوی آن داده ﺷده اﺳت.
>#include <iostm8s003f3.h
>#include <intrinsics.h
"#include "delay.h
__enable_interrupt();
while (1)
{
__wait_for_interrupt();
}
}
راه اﻧدازی )Analog/digital converter (ADC
ﻣﯾﮑروﮐﻧﺗرﻟر STM8Sاز ﯾﮏ ADC 10bitﺑﮭره ﻣﯽ ﺑرد .در زﯾر ﻣﯾﺗواﻧﯾد ﻣﺷﺧﺻﺎت ﮐﻠﯽ اﯾن ﻣﺎژول را ﻣﺷﺎھده ﻧﻣﺎﯾﯾد.
ھﻣﺎﻧطور ﮐﮫ در ﺷﮑل زﯾر ﻣﺷﺎھده ﻣﯽ ﻧﻣﺎﯾﯾد ﭘﺎﯾﮫ ای آﻧﺎﻟوگ ﺑﺎ اﺳم AINxﻣﺷﺧص ﺷده اﻧد.
ADCاﯾن ﻣﯾﮑروﮐﻧﺗرﻟر دارای ﭼﻧدﯾن رﺟﯾﺳﺗر ﻣﯾﺑﺎﺷد ﮐﮫ ﺗوﺿﯾﺢ ﺗﮏ ﺗﮏ اﻧﮭﺎ از ﺣوﺻﻠﮫ اﯾن ﺑﺣث ﺧﺎرج ﺑوده و ﻣﯾﺗواﻧﯾد ﺗوﺿﯾﺣﺎت آن را از datasheet
ﻣﯾﮑروﮐﻧﺗرﻟر ﺑﺧواﻧﯾد .در زﯾر ﺑﺎ اراﺋﮫ ﯾﮏ ﻣﺛﺎل و ﺑﺎ اﺳﺗﻔﺎده از رﺟﯾﺳﺗرھﺎی ﻣﮭم ان ﻣﺛﺎﻟﯽ ﻧوﺷﺗﮫ ﺷده اﺳت ﮐﮫ ﻣﯾﺗواﻧﯾد از ان ﺑﮭره ﺑﺑرﯾد.
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اراﺋﮫ ﺷود و از ﺑﯾﺎن ﺟزﺋﯾﺎت ﺧودداری ﺷده اﺳت .ھﻣﭼﻧﯾن ﺷﻣﺎ ﻣﯾﺗواﻧﯾد
از ﮐﺗﺎﺑﺧﺎﻧﮫ ھﺎی اراﺋﮫ ﺷده ﺗوﺳط ﮐﺎﻣﭘﺎﯾﻠر اﺳﺗﻔﺎده ﻧﻣﺎﯾﯾد ،اﻣﺎ در اﯾن اﻣوزش ﺑرای درک ﺑﮭﺗر از اﯾن ﻣﯾﮑروﮐﻧﺗرﻟر از رﺟﯾﺳﺗرھﺎ ﺑرای اﻣوزش اﺳﺗﻔﺎده ﺷد.اﻣﯾد اﺳت
ﺑﺎ ﺧواﻧدن اﯾن ﻣطﺎﻟب ﺗواﻧﺳﺗﮫ ﺑﺎﺷم ﺧدﻣﺗﯽ ﺑﺳﯾﺎر ﮐوﭼﮏ در زﻣﯾﻧﮫ ﻋﻠم اﻟﮑﺗروﻧﯾﮏ ﺑﮫ ﻋﻼﻗﮫ ﻣﻧدان اﯾن ﻋﻠم زﯾﺑﺎ ﮐرده ﺑﺎﺷم .
در ﺻورت وﺟود ﻣﺷﮑل و ھرﮔوﻧﮫ ﭘﯾﺷﻧﮭﺎدی در ارﺋﮫ ﺑﮭﺗر ﻣطﺎﻟب و ﻣطﺎﻟﺑﯽ ﺑرای ﮐﺎﻣل ﮐردن اﯾن آﻣوزش ﻣﯾﺗواﻧﯾد ﻧظرات ﺧود را ﺑﮫ ادرس زﯾر ارﺳﺎل ﻧﻣﺎﯾﯾد.
alimohammad_shafiei@yahoo.com
ﺑﺎ ﺗﺷﮑر
ﻋﻠﯽ ﻣﺣﻣد ﺷﻔﯾﻌﯽ