📄 tutorial.c
字号:
/********************************************************************/
/* HOS-H8 (ITRON version3) */
/* tutorial6 */
/* 偙偺僾儘僌儔儉偼儌乕僪7偮傑傝ONE CHIP儌乕僪偱摦嶌偝偣傑偡丅 */
/* */
/* 擔棫敿摫懱僙儈僫乕採嫙偺僨僶僀僗掕媊僿僢僟乕僼傽僀儖偑昗弨偺 */
/* 僿僢僟乕僼傽僀儖傪曐懚偟偨僨傿儗僋僩儕偺壓丄H8僨傿儗僋僩儕偵 */
/* 曐懚偝傟偰偄傞偲慜採偝傟偰偄傑偡丅栜榑幚嵺偺娐嫬偵崌傢偣偰廋 */
/* 惓偑昁梫偱偡丅 */
/* */
/* Copyright (C) 1998-2002 by Project HOS */
/********************************************************************/
#include "..\..\..\..\..\include\h83048f.h"
#include "itron.h" /* HOS-H8梡僿僢僟僼傽僀儖 */
#include "defid.h" /* 僐儞僼傿僊儏儗乕僞乕偑惗惉偡傞ID掕媊僼傽僀儖 */
#include "tutorial.h"
#include "comm.h"
#include "itu.h"
/*僞僀儅娭悢*/
static void ITU0_Init( unsigned int TimeFactor );
/*僔儕傾儖娭悢*/
static void SCI1_Init( unsigned char rate );
static void SCI_Putc( char c );
static void SCI_Puts( char *str );
/********************************************************************/
/* 僗僞乕僩傾僢僾乮旕僞僗僋晹乯 */
/* HOS偵偼main偼懚嵼偣偢傑偢偙偺張棟偑屇偽傟丄僔僗僥儉偺弶婜壔 */
/* TASK偺婲摦側偳傪峴偆丅 */
/********************************************************************/
void start_up( void )
{
/********************************************************************/
/* 億乕僩9偺弶婜壔 */
/* bit0:TXD0 */
/* bit1:TXD1 */
/* bit2:RXD0 */
/* bit3:RXD1 */
/********************************************************************/
P9.DDR = 0x03; /*0000 0011*/
/*廃曈僨僶僀僗偺弶婜壔:*/
ITU0_Init( TIM_1m ); /*僔僗僥儉僞僀儅乕偺廃婜傪1ms偵愝掕*/
/*SCI偺弶婜壔張棟*/
SCI1_Init( SCI_38400 ); /*儃乕儗乕僩偼38400bps偵愝掕*/
vset_tmi( 1 ); /*偙偺娭悢(幚偼儅僋儘)偱1ms娫妘偺帪娫峏怴傪巜掕偡傞*/
/* 僔僗僥儉僒乕價僗奐巒 */
sta_tsk( TID_HELLO1, 0 ); /*HELLO偲弌椡偡傞TASK*/
sta_tsk( TID_HELLO2, 1 ); /*HELLO偲弌椡偡傞TASK*/
sta_tsk( TID_HELLO3, 2 ); /*HELLO偲弌椡偡傞TASK*/
sta_tsk( TID_HELLO4, 3 ); /*HELLO偲弌椡偡傞TASK*/
sta_tsk( TID_DISPLAY, 0 ); /*儊僢僙乕僕傪昞帵偡傞TASK*/
}
/********************************************************************/
/* hello TASK */
/********************************************************************/
void hello( INT stcd )
{
int delay_time[] = { 500, 750, 1000, 1250 }; /*懸偪帪娫*/
const char Msg[][32] =
{
"hello itron from 1\r\n",
"hello itron from 2\r\n",
"hello itron from 3\r\n",
"hello itron from 4\r\n",
};
while( 1 ) /*偙偺TASK偼堦搙婲摦偟偨傜帺暘偐傜廔椆偼偟側偄*/
{
dly_tsk( delay_time[ stcd ] ); /*帪娫懸偪張棟*/
/*儊乕儖俛俷倃偵儊僢僙乕僕傪擖傟傞*/
snd_msg( MID_MSG, (T_MSG *)Msg[stcd] );
}
}
/********************************************************************/
/* display TASK */
/********************************************************************/
void display( INT stcd )
{
T_MSG *pk_msg;
while( 1 ) /*偙偺TASK偼堦搙婲摦偟偨傜帺暘偐傜廔椆偼偟側偄*/
{
/*儊僢僙乕僕懸偪偵擖傞*/
rcv_msg( (T_MSG *)&pk_msg, MID_MSG );
SCI_Puts( (char *)pk_msg );
}
}
/********************************************************************/
/* 僞僀儅梡妱傝崬傒僴儞僪儔 */
/********************************************************************/
void TimerTrap( void )
{
int i;
ITU0.TSR.BYTE &= 0xfe; /*妱崬傒忦審偺僋儕傾*/
/* 俷俽偺僞僀儅僴儞僪儔傪僐乕儖 */
__timer_handler();
}
/********************************************************************/
/* SCI弶婜壔張棟 */
/* 8bit丄嬼悢僷儕僥傿丄stop1偵愝掕偡傞丅堷悢偼儃乕儗乕僩 */
/********************************************************************/
static void SCI1_Init( unsigned char rate )
{
volatile int i;
char c;
/* SCI弶婜壔 */
SCI1.SCR.BYTE = 0x00; /*SCR傪0僋儕傾*/
SCI1.SMR.BYTE = 0x00; /*8bit丄僷儕僥傿柍偟丄STOP1*/
SCI1.BRR = rate; /*儃乕儗乕僩偼堷悢偱庢摼*/
for( i = 0; i < 250; i++ ){} /*帪娫懸偪*/
SCI1.SCR.BYTE = 0x70; /*庴怣妱傝崬傒傪巊梡偡傞*/
c = SCI1.SSR.BYTE; /*僟儈乕儕乕僪*/
SCI1.SSR.BYTE = 0x80; /*僄儔乕僼儔僌偺僋儕傾*/
}
/********************************************************************/
/* SCI堦暥帤憲怣張棟 */
/* 妱傝崬傒傪巊梡偣偢偵僗僥乕僞僗偩偗偱憲怣偡傞 */
/********************************************************************/
static void SCI_Putc( char c )
{
while( SCI1.SSR.BIT.TDRE == 0 ){} /*TDREbit傪挷傋偰1偵側傞傑偱懸偮*/
SCI1.TDR = c; /*僨乕僞憲怣*/
SCI1.SSR.BIT.TDRE = 0; /*TDREbit偺僋儕傾*/
}
/********************************************************************/
/* SCI暥帤楍憲怣張棟 */
/* 妱傝崬傒傪巊梡偣偢偵僗僥乕僞僗偩偗偱憲怣偡傞 */
/********************************************************************/
static void SCI_Puts( char *str )
{
while( *str ) SCI_Putc( *str++ );
}
/********************************************************************/
/* ITU0弶婜壔張棟 */
/* ITU0偼僔僗僥儉僞僀儅乕偲偟偰棙梡偡傞 */
/* 堷悢TimeFactor偼廃婜傪愝掕偡傞 */
/********************************************************************/
static void ITU0_Init( unsigned int TimeFactor )
{
ITU.TSTR.BIT.STR0 = 0; /*ITU0掆巭*/
ITU.TSNC.BIT.SYNC0 = 0; /*ch0偼撈棫摦嶌*/
ITU.TMDR.BIT.PWM0 = 0; /*ch0偼捠忢摦嶌*/
ITU0.TCR.BYTE = 0xa3; /*1010 0001:僐儞儁傾儅僢僠A偱TCNT傪僋儕傾*/
/*棫忋偑傝僄僢僕丄兂/8僋儘僢僋*/
ITU0.GRA = TimeFactor; /*僐儞儁傾儅僢僠A偺抣傪戙擖*/
ITU0.TIOR.BYTE = 0x88; /*1000 1000:僐儞儁傾儅僢僠弌椡嬛巭*/
ITU0.TSR.BYTE &= 0xf8; /*僗僥乕僞僗偺僋儕傾*/
ITU0.TIER.BYTE = 0xf9; /*僐儞儁傾儅僢僠A偱妱崬傒*/
ITU.TSTR.BIT.STR0 = 1; /*ITU0僗僞乕僩*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -