大和田/日誌/2008-12-04
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[大和田/日誌]]
-コンテスト
--割り込みベクタに関数ポインタを渡す。
--タイマ割り込みを用いたプログラムを4行で実現。
set_timer_init_value(27000000); // タイマの初期値
set_timer_interrupt_handler(incseg); // 関数ポインタ
timer_interrupt_enable();
run_timer();
--キー割り込みを用いたプログラムを2行で実現。
set_key_interrupt_handler(incseg); // 関数ポインタ
key_interrupt_enable();
--JALで保存すべきなのはPC+8。ディレイスロット的な意味で。
--構築設計論の課題のストップウォッチはこんなに簡単に書けます(ライブラリが必要)。デバッグ込みで所要時間15分。
#include "de2_mips.h"
int count[4] = {0,0,0,0};
int split;
void increment_timer(void) {
int i;
if(count[0] == 9) {
count[0] = 0;
if(count[1] == 9) {
count[1] = 0;
if(count[2] == 5) {
count[2] = 0;
if(count[3] == 9) {
count[3] = 0;
}
else
count[3]++;
}
else
count[2]++;
}
else
count[1]++;
}
else
count[0]++;
for(i = 0; i < 4; i++)
display_sevenseg(i, count[i]);
}
void copy_split_time(void) {
display_lcd(0, get_lcd(16));
display_lcd(1, get_lcd(17));
display_lcd(2, get_lcd(18));
display_lcd(3, get_lcd(19));
display_lcd(4, get_lcd(20));
display_lcd(5, get_lcd(21));
display_lcd(6, get_lcd(22));
display_lcd(7, get_lcd(23));
display_lcd(8, get_lcd(24));
}
void display_split_time(void) {
copy_split_time();
display_lcd(16, (int)'S');
display_lcd(17, split | 0x30);
display_lcd(18, (int)' ');
display_lcd(19, count[3] | 0x30);
display_lcd(20, (int)':');
display_lcd(21, count[2] | 0x30);
display_lcd(22, count[1] | 0x30);
display_lcd(23, (int)'.');
display_lcd(24, count[0] | 0x30);
if(split == 9)
split = 0;
else
split++;
}
void initialize_count(void) {
int i;
for(i = 0; i < 4; i++)
count[i] = 0;
}
int main(void) {
initialize_sevenseg();
initialize_lcd();
initialize_count();
split = 1;
set_and_run_timer(2700000, (int)increment_timer);
set_key_interrupt((int)display_split_time);
return 0;
}
終了行:
[[大和田/日誌]]
-コンテスト
--割り込みベクタに関数ポインタを渡す。
--タイマ割り込みを用いたプログラムを4行で実現。
set_timer_init_value(27000000); // タイマの初期値
set_timer_interrupt_handler(incseg); // 関数ポインタ
timer_interrupt_enable();
run_timer();
--キー割り込みを用いたプログラムを2行で実現。
set_key_interrupt_handler(incseg); // 関数ポインタ
key_interrupt_enable();
--JALで保存すべきなのはPC+8。ディレイスロット的な意味で。
--構築設計論の課題のストップウォッチはこんなに簡単に書けます(ライブラリが必要)。デバッグ込みで所要時間15分。
#include "de2_mips.h"
int count[4] = {0,0,0,0};
int split;
void increment_timer(void) {
int i;
if(count[0] == 9) {
count[0] = 0;
if(count[1] == 9) {
count[1] = 0;
if(count[2] == 5) {
count[2] = 0;
if(count[3] == 9) {
count[3] = 0;
}
else
count[3]++;
}
else
count[2]++;
}
else
count[1]++;
}
else
count[0]++;
for(i = 0; i < 4; i++)
display_sevenseg(i, count[i]);
}
void copy_split_time(void) {
display_lcd(0, get_lcd(16));
display_lcd(1, get_lcd(17));
display_lcd(2, get_lcd(18));
display_lcd(3, get_lcd(19));
display_lcd(4, get_lcd(20));
display_lcd(5, get_lcd(21));
display_lcd(6, get_lcd(22));
display_lcd(7, get_lcd(23));
display_lcd(8, get_lcd(24));
}
void display_split_time(void) {
copy_split_time();
display_lcd(16, (int)'S');
display_lcd(17, split | 0x30);
display_lcd(18, (int)' ');
display_lcd(19, count[3] | 0x30);
display_lcd(20, (int)':');
display_lcd(21, count[2] | 0x30);
display_lcd(22, count[1] | 0x30);
display_lcd(23, (int)'.');
display_lcd(24, count[0] | 0x30);
if(split == 9)
split = 0;
else
split++;
}
void initialize_count(void) {
int i;
for(i = 0; i < 4; i++)
count[i] = 0;
}
int main(void) {
initialize_sevenseg();
initialize_lcd();
initialize_count();
split = 1;
set_and_run_timer(2700000, (int)increment_timer);
set_key_interrupt((int)display_split_time);
return 0;
}
ページ名: